La différence est subtile.
En JavaScript un undefined
variable est une variable qui n'a jamais été déclarée, ou jamais d'attribuer une valeur. Disons que vous déclarez var a;
, par exemple, a
sera undefined
, parce qu'il n'a jamais été attribué aucune valeur.
Mais si vous affectez ensuite a = null;
alors a
sera désormais null
. En JavaScript null
est un objet (essayez typeof null
dans une console JavaScript si vous ne me croyez pas), ce qui signifie que la valeur null est une valeur (en fait, même à l' undefined
est une valeur).
Exemple:
var a;
typeof a; # => "undefined"
a = null;
typeof null; # => "object"
Cela peut s'avérer utile dans les arguments de la fonction. Vous voudrez peut-être avoir une valeur par défaut, mais la considérer comme nulle pour être acceptable. Dans ce cas, vous pouvez le faire:
function doSomething(first, second, optional) {
if (typeof optional === "undefined") {
optional = "three";
}
// do something
}
Si vous omettez l' optional
paramètre doSomething(1, 2) then
facultatif sera l' "three"
chaîne de caractères, mais si vous passez doSomething(1, 2, null)
option sera null
.
Comme pour l'égalité des ==
et strictement égal ===
de comparaison, le premier est faiblement type, tandis que strictement égal vérifie également pour le type de valeurs. Cela signifie qu' 0 == "0"
retournera true; while 0 === "0"
retournera false, parce qu'un certain nombre n'est pas une chaîne.
Vous pouvez utiliser ces opérateurs pour vérifier entre undefined
un null
. Par exemple:
null === null # => true
undefined === undefined # => true
undefined === null # => false
undefined == null # => true
Le dernier cas est intéressant, car il permet de vérifier si une variable est soit défini ou nul et rien d'autre:
function test(val) {
return val == null;
}
test(null); # => true
test(undefined); # => true