1303 votes

Quelle est la différence entre null et undefined en JavaScript ?

Je veux savoir quelle est la différence entre null et undefined en JavaScript.

Fournissez dans votre réponse le meilleur lien qui se rapporte à ce sujet en JavaScript.

1247voto

sebastian Points 2143

En JavaScript, "undefined" signifie qu'une variable a été déclarée mais qu'aucune valeur ne lui a encore été attribuée, par exemple :

 var TestVar;
 alert(TestVar); //shows undefined
 alert(typeof TestVar); //shows undefined

null est une valeur d'affectation. Elle peut être assignée à une variable comme représentation d'une absence de valeur :

 var TestVar = null;
 alert(TestVar); //shows null
 alert(typeof TestVar); //shows object

D'après les exemples précédents, il est clair que undefined et null sont deux types distincts : undefined est un type lui-même (non défini) alors que null est un objet.

82voto

ayush Points 6352

J'ai pris ça dans ici

La valeur indéfinie est une valeur primitive utilisée lorsqu'aucune valeur n'a été attribuée à une variable. n'a pas reçu de valeur.

La valeur nulle est une valeur primitive qui représente la référence nulle, vide, ou une référence inexistante.

Lorsque vous déclarez une variable par le biais de var et que vous ne lui donnez pas de valeur, elle aura la valeur indéfinie. En soi, si vous essayez de WScript.Echo() ou alert() cette valeur, vous ne verrez rien. Toutefois, si vous lui ajoutez une chaîne vide, elle apparaîtra soudainement :

var s;
WScript.Echo(s);
WScript.Echo("" + s);

Vous pouvez déclarer une variable, lui attribuer la valeur null, et le comportement est identique, sauf que vous verrez "null" s'afficher au lieu de "undefined". Il s'agit d'une petite différence.

Vous pouvez même comparer une variable indéfinie à null ou vice versa, et la condition sera vraie :

undefined == null
null == undefined

Ils sont toutefois considérés comme deux types différents. Alors qu'undefined est un type à part entière, null est considéré comme une valeur d'objet spéciale. Pour s'en convaincre, il suffit d'utiliser la fonction typeof() qui renvoie une chaîne de caractères représentant le type général d'une variable :

var a;
WScript.Echo(typeof(a));
var b = null;
WScript.Echo(typeof(b));

En exécutant le script ci-dessus, on obtient la sortie suivante :

undefined
object

Bien qu'ils soient de types différents, ils se comporteront de la même manière si vous essayez d'accéder à un membre de l'un ou l'autre, c'est-à-dire qu'ils lèveront une exception. Avec WSH, vous verrez le redoutable "'varname' is null or not an object" et ce, si vous avez de la chance (mais c'est un sujet pour un autre article).

Vous pouvez explicitement définir une variable comme étant indéfinie, mais je vous le déconseille fortement. Je recommande de ne définir que des variables nulles et de laisser la valeur indéfinie pour les choses que vous avez oublié de définir. En même temps, je vous encourage vraiment à toujours définir chaque variable. JavaScript a une chaîne de portée différente de celle des langages de style C, ce qui peut facilement dérouter même les programmeurs expérimentés, et définir les variables à null est la meilleure façon d'éviter les bogues basés sur cela.

Un autre cas où vous verrez apparaître le terme "indéfini" est l'utilisation de l'opérateur de suppression. Ceux d'entre nous qui viennent du monde C pourraient interpréter cette opération comme la destruction d'un objet, mais ce n'est pas le cas. Cette opération permet de supprimer un indice d'un tableau ou un membre d'un objet. Pour les tableaux, cela n'affecte pas la longueur, mais l'indice est désormais considéré comme indéfini.

var a = [ 'a', 'b', 'c' ];
delete a[1];
for (var i = 0; i < a.length; i++)
WScript.Echo((i+".) "+a[i]);

Le résultat du script ci-dessus est :

0.) a
1.) undefined
2.) c

Vous obtiendrez également un retour indéfini lorsque vous lirez un indice ou un membre qui n'a jamais existé.

La différence entre null et undefined est la suivante : JavaScript ne mettra jamais rien à null, c'est généralement ce que nous faisons. Bien que nous puissions définir des variables comme étant indéfinies, nous préférons null car ce n'est pas quelque chose qui est fait pour nous. Lorsque vous déboguez, cela signifie que tout ce qui est mis à null est de votre fait et non de celui de JavaScript. Au-delà de cela, ces deux valeurs spéciales sont presque équivalentes.

43voto

Mina Gabriel Points 2172

null est un mot clé spécial qui indique une absence de valeur.

pense à ça comme à une valeur, comme :

  • "foo" est une chaîne de caractères,
  • true est un booléen ,
  • 1234 est un numéro,
  • null est indéfini.

indéfini indique qu'aucune valeur n'a été attribuée à une variable, y compris la propriété null . Comme

var foo;

La variable vide définie est null de type de données undefined


Tous deux représentent un valeur d'une variable sans valeur

ET null ne représente pas un chaîne de caractères qui n'a pas de valeur - chaîne vide-


Comme

var a = ''; 
console.log(typeof a); // string 
console.log(a == null); //false 
console.log(a == undefined); // false 

Maintenant si

var a;
console.log(a == null); //true
console.log(a == undefined); //true 

MAIS

var a; 
console.log(a === null); //false 
console.log(a === undefined); // true

SO chacun a sa propre façon d'utiliser

indéfini l'utiliser pour comparer le type de données de la variable

null l'utiliser pour vider la valeur d'une variable

var a = 'javascript';
a = null ; // will change the type of variable "a" from string to object

23voto

Dmitry Sychov Points 281

null : absence de valeur pour une variable ; indéfini l'absence de la variable elle-même ;

où variable est un nom symbolique associé à une valeur.

JS pourrait avoir la gentillesse d'initier implicitement les variables nouvellement déclarées avec null mais ce n'est pas le cas.

16voto

Kevin Points 47

Vous pouvez considérer qu'undefined représente une absence de valeur au niveau du système, inattendue ou semblable à une erreur, et null une absence de valeur au niveau du programme, normale ou attendue.

via JavaScript:The Definitive Guide

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