Ce qui est un peu étrange, c'est que le langage JavaScript a en fait deux valeurs qui représentent "non": Undefined et Null. pourquoi donc?
1. Similitude
Dans JavaScript, attribuer une variable à un non définie ou nul, honnêtement, presque aucune différence.
La copie de code est la suivante:
var a = non défini;
var a = null;
Dans le code ci-dessus, la variable A est affectée respectivement à un non défini et nul, et ces deux méthodes d'écriture sont presque équivalentes.
Undefined et null sont automatiquement convertis en false dans l'instruction if, et l'opérateur d'égalité rapporte même directement que les deux sont égaux.
La copie de code est la suivante:
si (! non défini)
console.log («Undefined est faux»);
// Undefined est faux
si (! null)
console.log («null est faux»);
// null est faux
Undefined == null
// vrai
Le code ci-dessus montre à quel point les comportements des deux sont similaires!
Étant donné que la signification et l'utilisation des indéfinis et nuls sont similaires, pourquoi avez-vous besoin de deux valeurs de ce type en même temps? Dart, une alternative JavaScript à Google, stipule clairement qu'il n'y a que nul et pas non défini!
2. Raisons historiques
Récemment, lorsque je lisais le nouveau livre "Speaking Javascript", j'ai découvert accidentellement la réponse à cette question!
Il s'avère que cela est lié à l'histoire de JavaScript. Lorsque JavaScript est né en 1995, il a été initialement défini comme Java, seul Null a été défini comme une valeur indiquant "aucun".
Selon la tradition du langage C, Null est conçu pour se tourner automatiquement vers 0.
La copie de code est la suivante:
Numéro (null)
// 0
5 + null
// 5
Cependant, le concepteur de JavaScript Brendan Eich pense que cela ne suffit pas, pour deux raisons.
Tout d'abord, Null est traité comme un objet comme dans Java.
La copie de code est la suivante:
type de nul
// "objet"
Cependant, les types de données de JavaScript sont divisés en deux catégories: les types primitifs et synthétiques (complexes).
Deuxièmement, la version initiale de JavaScript n'incluait pas de mécanisme de gestion des erreurs. Brendan Eich pense que si Null se transforme automatiquement vers 0, il n'est pas facile de trouver des erreurs.
Par conséquent, Brendan Eich a conçu un autre indéfini.
3. Conception initiale
La version originale de JavaScript l'a distinguée comme ceci: Null est un objet qui représente "aucun", qui est 0 lorsqu'il est converti en valeur numérique; .
La copie de code est la suivante:
Numéro (indéfini)
// nan
5 + indéfini
// nan
4. Utilisation actuelle
Cependant, la distinction ci-dessus s'est rapidement révélée inquiet dans la pratique. À l'heure actuelle, NULL et UNDEFINED sont essentiellement synonymes avec seulement quelques légères différences.
Null signifie «pas d'objet», c'est-à-dire qu'il ne devrait pas y avoir de valeur là-bas. L'utilisation typique est:
(1) En tant que paramètre d'une fonction, le paramètre de la fonction n'est pas un objet.
(2) comme point final de la chaîne prototype d'objet.
La copie de code est la suivante:
Object.getprototypeof (object.prototype)
// nul
Undefined signifie «valeur manquante», ce qui signifie qu'il devrait y avoir une valeur ici, mais elle n'a pas encore été définie. L'utilisation typique est:
(1) Lorsqu'une variable est déclarée mais n'a aucune affectation, elle est équivalente à non définie.
(2) Lors de l'appel de la fonction, le paramètre qui doit être fourni n'est pas fourni et le paramètre est égal à non défini.
(3) L'objet n'a aucun attribut attribué à la valeur et la valeur de l'attribut n'est pas définie.
(4) Lorsque la fonction ne renvoie pas de valeur, un non défini est renvoyé par défaut.
La copie de code est la suivante:
var i;
I // Undefined
fonction f (x) {console.log (x)}
f () // non défini
var o = nouvel objet ();
OP // Undefined
var x = f ();
x // non défini