Si vous pouvez enrouler autour de votre tête cela, le jetonundefined
est en réalité non défini. Permettez-moi d'élaborer: même si JavaScript a une valeur primitive spéciale appelée undefined, undefined
est pas un mot clé JavaScript et n'a pas de signification particulière. Vous pouvez casser le code qui teste l'existence d'un objet en le comparant à undefined
en le définissant.
var obj = { BKEY: 'I exist!' };
if (obj.AKEY == undefined) console.log ('no AKEY');
if (obj.BKEY == undefined) console.log ('should not happen');
undefined='uh oh';
if (obj.AKEY == undefined) console.log ('oops!'); // Logically, we want this to execute, but it will not!
if (obj.BKEY == undefined) console.log ('should not happen');
La seule sortie de la console sera 'no AKEY'. Après avoir affecté à la variable globale undefined
, obj.AKEY == undefined
devient faux car undefined != 'uh oh'
. obj.BKEY == undefined
retourne toujours faux, mais seulement parce que nous sommes chanceux. Si j'avais défini obj.BKEY='uh oh'
, alors obj.BKEY == undefined
serait vrai, même s'il existe réellement!
Vous souhaitez probablement définir explicitement AKEY
à null
. (Par ailleurs, null
est un mot-clé, null='uh oh'
lève une exception).
Vous pouvez aussi tout simplement omettre AKEY
de votre JSON, dans ce cas, vous trouverez:
typeof(example.AKEY) == 'undefined'
(Si vous définissez AKEY
à null
, puis typeof(example.AKEY) == 'object'
.)
La seule vraie différence entre le réglage à null et omettre est de savoir si vous voulez que la clé apparaisse dans une boucle foreach.
Il existe * une * différence entre '{}' et '{AKEY: undefined}'. Avec ce dernier, 'AKEY' apparaîtra dans l'énumération' for each'. –
@Matthew - Quand vous y accédez, il n'y a pas de différence ... pouvez-vous penser à un cas d'utilisation valide où vous voudriez le voir énuméré et prendre soin, étant donné qu'il n'est pas défini? –
Non. Et cela simplifie définitivement les choses pour JSON juste pour avoir null. Je voulais juste noter qu'il y a une différence. –