En JavaScript, il y a deux valeurs qui disent essentiellement «je n'existe pas» - undefined
et null
.
Une propriété à laquelle un programmeur n'a rien assigné le sera undefined
, mais pour qu'une propriété devienne null
, elle null
doit lui être explicitement assignée.
J'ai pensé une fois qu'il y avait un besoin de null
parce que undefined
c'est une valeur primitive et null
un objet. Ce n'est pas, même si typeof null
cela donnera 'object'
: en fait, les deux sont des valeurs primitives - ce qui signifie que ni undefined
ni null
ne peut être retourné à partir d'une fonction de constructeur, car les deux seront convertis en un objet vide (il faut lancer une erreur pour proclamer l'échec des constructeurs).
Ils sont également tous deux évalués false
dans des contextes booléens. La seule vraie différence à laquelle je puisse penser est que l'un évalue à NaN
, l'autre à 0
dans des contextes numériques.
Alors pourquoi y a-t-il les deux undefined
et null
si cela ne fait que confondre les programmeurs qui vérifient de manière incorrecte null
lorsqu'ils essaient de savoir si une propriété a été définie ou non?
Ce que j'aimerais savoir, c'est si quelqu'un a un exemple raisonnable où il est nécessaire d'utiliser null
ce qui ne pourrait pas être exprimé en utilisant à la undefined
place.
Ainsi, le consensus général semble être que cela undefined
signifie «il n'y a pas de telle propriété» alors que null
signifie «la propriété existe, mais n'a aucune valeur».
Je pourrais vivre avec cela si les implémentations JavaScript imposaient réellement ce comportement - mais undefined
c'est une valeur primitive parfaitement valide, donc elle peut facilement être attribuée à des propriétés existantes pour rompre ce contrat. Par conséquent, si vous voulez vous assurer qu'une propriété existe, vous devez utiliser l' in
opérateur ou de hasOwnProperty()
toute façon. Encore une fois: quelle est l'utilité pratique des valeurs séparées pour undefined
et null
?
J'utilise en fait undefined
quand je veux annuler les valeurs de propriétés qui ne sont plus utilisées mais que je ne veux pas delete
. Dois-je utiliser à la null
place?
In JavaScript, there are two values which basically say 'I don't exist' - undefined and null.
Non, undefined
dit seulement ça.
undefined
.