J'ai choisi ça d' ici
La valeur non définie est une valeur primitive utilisée lorsqu'aucune valeur n'a été affectée à une variable.
La valeur nulle est une valeur primitive qui représente la référence nulle, vide ou inexistante.
Lorsque vous déclarez une variable via var et ne lui donnez pas de valeur, elle aura la valeur indéfinie. En soi, si vous essayez d'utiliser WScript.Echo () ou alert () cette valeur, vous ne verrez rien. Cependant, si vous y ajoutez une chaîne vide, elle apparaîtra soudainement:
var s;
WScript.Echo(s);
WScript.Echo("" + s);
Vous pouvez déclarer une variable, la définir sur null et le comportement est identique sauf que vous verrez "null" imprimé contre "undefined". C'est vraiment une petite différence.
Vous pouvez même comparer une variable non définie à null ou vice versa, et la condition sera vraie:
undefined == null
null == undefined
Ils sont cependant considérés comme deux types différents. Bien qu'undefined soit un type à lui tout seul, null est considéré comme une valeur d'objet spécial. Vous pouvez le voir en utilisant typeof () qui retourne une chaîne représentant le type général d'une variable:
var a;
WScript.Echo(typeof(a));
var b = null;
WScript.Echo(typeof(b));
L'exécution du script ci-dessus entraînera la sortie suivante:
undefined
object
Indépendamment du fait qu'ils soient de types différents, ils agiront toujours 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 redouté "'varname' est nul ou pas un objet" et c'est si vous êtes chanceux (mais c'est un sujet pour un autre article).
Vous pouvez explicitement définir une variable pour qu'elle ne soit pas définie, mais je la déconseille fortement. Je recommande de définir uniquement les variables sur null et de laisser indéfinie la valeur des éléments 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, confondant facilement même les programmeurs chevronnés, et définir des variables sur null est le meilleur moyen d'éviter les bogues basés sur elle.
Une autre instance où vous verrez une fenêtre contextuelle non définie est lors de l'utilisation de l'opérateur de suppression. Ceux d'entre nous d'un monde C pourraient à tort interpréter cela comme détruisant un objet, mais ce n'est pas le cas. Cette opération consiste à supprimer un indice d'un tableau ou un membre d'un objet. Pour les tableaux, cela n'affecte pas la longueur, mais plutôt que l'indice est désormais considéré comme non dé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 non défini lors de la lecture d'un indice ou d'un membre qui n'a jamais existé.
La différence entre null et undefined est: JavaScript ne définira jamais rien sur null, c'est généralement ce que nous faisons. Bien que nous puissions définir des variables sur undefined, nous préférons null car ce n'est jamais quelque chose qui est fait pour nous. Lorsque vous déboguez, cela signifie que tout ce qui est défini sur null vous appartient et non JavaScript. Au-delà, ces deux valeurs spéciales sont presque équivalentes.
null
valeur dans JavaScript?