116 votes

Javascript null ou undefined

Je suis vraiment confus quand Javascript renvoie null ou undefined. Aussi différents navigateurs semblent être de retour ces différemment.

Pourriez-vous nous donner quelques exemples d' null/undefined avec le navigateur de retour.

Alors que je suis maintenant clair sur l' undefined aspect, je ne suis pas encore 100% sur null.Il est similaire à une valeur vide ?

E. g. Vous avez une zone de texte qui n'a pas de valeur définie. Maintenant, lorsque vous essayez d'accéder à sa valeur, qu'il sera null ou undefined et sont-ils semblables ?

122voto

Cory Gross Points 3118

Je trouve que certaines de ces réponses sont vagues et compliqué, je trouve que la meilleure façon de comprendre ces choses est sûr, c'est qu'à ouvrir la console et de tester vous-même.

var x;

x == null            // true
x == undefined       // true
x === null           // false
x === undefined      // true

var y = null;

y == null            // true
y == undefined       // true
y === null           // true
y === undefined      // false

typeof x             // 'undefined'
typeof y             // 'object'

var z = {abc: null};

z.abc == null        // true
z.abc == undefined   // true
z.abc === null       // true
z.abc === undefined  // false

z.xyz == null        // true
z.xyz == undefined   // true
z.xyz === null       // false
z.xyz === undefined  // true

null = 1;            // throws error: invalid left hand assignment
undefined = 1;       // works fine: this can cause some problems

Donc, c'est certainement l'un des plus subtiles nuances de JavaScript. Comme vous pouvez le voir, vous pouvez remplacer la valeur de undefined, rendant peu fiables par rapport à l' null. À l'aide de l' == de l'opérateur, vous pouvez utiliser fiable null et undefined de façon interchangeable pour autant que je peux dire. Toutefois, en raison de l'avantage qu' null ne peut pas être redéfini, je pourrais l'utiliser lors de l'utilisation d' ==.

Par exemple, variable != null renverra TOUJOURS false si variable est égale à null ou undefined, alors que variable != undefined retournera false si variable est égale à null ou undefined MOINS undefined est réaffecté à l'avance.

Vous pouvez utiliser fiable de l' === opérateur de différencier undefined et null, si vous avez besoin de vérifier qu'une valeur est undefined (plutôt que d' null).

Selon l'ECMAScript 5 spec:

  • Les deux Null et Undefined sont deux des six construit dans les types de.

4.3.9 valeur non définie

valeur primitive utilisée lorsqu'une variable n'a pas été affecté une valeur

4.3.11 valeur null

primitive de la valeur que représente l'absence intentionnelle de tout objet de valeur

80voto

kennebec Points 33886

Les méthodes du DOM getElementById, nextSibling, childNodes[n], parentNode, et ainsi de suite retourner la valeur null (défini mais n'ayant aucune valeur) lorsque l'appel ne renvoie pas à un objet de nœud.

La propriété est définie, mais l'objet auquel il se réfère n'existe pas.

C'est l'une des rares fois vous pouvez pas voulez pour tester l'égalité-

if(x!==undefined) sera vrai pour une valeur null

mais si(x!= undefined) sera vrai (uniquement) pour les valeurs qui ne sont pas soit défini ou null.

50voto

Bjorn Tipling Points 16243

Vous obtenez non défini pour les différents scénarios:

Vous déclarez une variable var, mais jamais ensemble.

var foo; 
alert(foo); //undefined.

Vous tentez d'accéder à une propriété d'un objet que vous n'avez jamais ensemble.

var foo = {};
alert(foo.bar); //undefined

Vous tentez d'accéder à un argument qui n'a jamais été fournie.

function myFunction (foo) {
  alert(foo); //undefined.
}

Comme cwolves souligné dans un commentaire sur une autre réponse, les fonctions qui ne renvoient une valeur.

function myFunction () {
}
alert(myFunction());//undefined

Null généralement être intentionnellement sur une variable ou une propriété (voir les commentaires pour une affaire dans laquelle il peut apparaître, sans avoir été définie). En outre, une valeur null est de type object et indéfini est de type undefined.

Je tiens également à noter que la valeur null est valable en JSON mais pas défini n'est pas:

JSON.parse(undefined); //syntax error
JSON.parse(null); //null

9voto

Felix Kling Points 247451

J'ai peut-être raté quelque chose, mais autant que je sache, vous bénéficiez d' undefined seulement

Mise à jour: Ok, j'ai raté beaucoup de choses, en essayant de terminer:

Vous obtenez undefined...

... lorsque vous essayez d'accéder aux propriétés d'un objet qui n'existe pas:

var a = {}
a.foo // undefined

... quand vous avez déclaré une variable, mais n'est pas initialisé, il:

var a;
// a is undefined

... lorsque vous accédez à un paramètre pour lequel aucune valeur n'a été adoptée:

function foo (a, b) {
    // something
}

foo(42); // b inside foo is undefined

... lorsqu'une fonction ne retourne pas de valeur:

function foo() {};
var a = foo(); // a is undefined

Il se peut que certaines fonctions intégrées de retour null sur une erreur, mais si oui, alors il est documenté. null est une valeur concrète en JavaScript, undefined ne l'est pas.


Normalement, vous n'avez pas besoin de distinguer entre ceux-ci. Selon les valeurs possibles d'une variable, il suffit d'utiliser if(variable) pour tester si une valeur est définie ou non (à la fois, null et undefined évaluer à l' false).

Aussi différents navigateurs semblent être de retour ces différemment.

Veuillez donner un exemple concret.

3voto

DiegoS Points 56

À ce sujet, la spécification ecma-262) est tout à fait clair

Je l'ai trouvé vraiment utile et simple, de sorte que je la partage: - Ici, vous trouverez de l'Égalité de l'algorithme - Ici, vous trouverez une Stricte égalité de l'algorithme

Je l'ai croisé dans la lecture de "l'Abrégé de l'égalité, une égalité stricte, et même de la valeur" à partir de mozilla developer site, la section de la monotonie.

J'espère que vous le trouverez utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X