En JavaScript, il y a deux valeurs qui disent en substance: "je ne suis pas exister' - undefined
et null
.
Une propriété à laquelle un programmeur n'a pas reçu de quoi que ce soit sera undefined
, mais pour une propriété afin de devenir l' null
, null
doit être explicitement attribuée.
Une fois, j'ai pensé qu'il y avait un besoin pour null
car undefined
est une valeur primitive et null
un objet. Ce n'est pas, même si typeof null
rendement 'object'
: en Fait, les deux sont des valeurs primitives, ce qui signifie ni undefined
ni null
peut être retourné par une fonction constructeur, car les deux seront convertis en un objet vide (on s'lève une erreur à proclamer l'échec dans les constructeurs).
Elles ont aussi évaluer d' false
booléennes contextes. La seule vraie différence, je pense, que l'on évalue à NaN
, l'autre pour 0
dans des contextes numériques.
Alors, pourquoi est-il à la fois undefined
et null
si cette confond tout simplement programmeurs qui sont mal vérifiant null
lorsque vous essayez de trouver si une propriété a été définie ou pas?
edit: Ce que je voudrais savoir c'est si quelqu'un a une raisonnable exemple où il est nécessaire d'utiliser null
qui ne pouvaient pas être exprimées à l'aide d' undefined
à la place.
edit2+3: de Sorte que le consensus général semble être que undefined
signifie "il n'y a pas de telle propriété" tandis qu' null
"la propriété n'existe pas, mais n'a aucune valeur'.
Je pourrais vivre avec ça si les implémentations JavaScript serait que l'application effective de ce comportement - mais undefined
est parfaitement valide de valeur primitive, de sorte qu'il peut facilement être attribuée aux propriétés existantes pour rompre ce contrat. Par conséquent, si vous voulez vous assurer que si une propriété existe, vous devez utiliser l' in
de l'opérateur ou de l' hasOwnProperty()
de toute façon. Donc encore une fois: quelle est l'utilisation pratique pour séparer les valeurs de undefined
et null
?
J'utilise en fait undefined
quand je veux annuler les valeurs de propriétés n'est plus en usage, mais que je ne veux pas d' delete
. Dois-je utiliser null
à la place?