Maison  >  Article  >  interface Web  >  Explication détaillée de la différence entre l'utilisation nulle et non définie en JavaScript

Explication détaillée de la différence entre l'utilisation nulle et non définie en JavaScript

伊谢尔伦
伊谢尔伦original
2017-07-18 14:07:141541parcourir

Juge indéfini et nul :

<span style="font-size: small;">var tmp = undefined; 
if (tmp== undefined) 
{ 
alert("null or undefined"); 
} </span>
<span style="font-size: small;">var tmp = undefined; 
if (tmp== null) 
{ 
alert("null or undefined"); 
}</span>

Explication : null==indéfini

Mais :
null !== indéfini
Alors c'est quoi les deux ? Quelle est la différence ?
null
C'est un objet, mais il est vide. Parce qu'il s'agit d'un objet, typeof null renvoie 'object' .
null est un mot-clé réservé JavaScript. Lorsque
null participe à des opérations numériques, sa valeur sera automatiquement convertie en 0. Par conséquent, l'expression suivante obtiendra la valeur correcte après calcul :
Expression : 123 + null Valeur du résultat : 123
Expression : 123 * valeur de résultat nulle : 0
non défini
undéfini est une propriété spéciale de l'objet global (fenêtre), et sa valeur n'est pas définie. Mais typeof undefined renvoie 'undefined' .
Bien qu'indéfini ait une signification particulière, il s'agit bien d'une propriété, et c'est une propriété de l'objet global (fenêtre).

alert(&#39;undefined&#39; in window);//输出:true 
var anObj = {}; 
alert(&#39;undefined&#39; in anObj); //输出:false

On peut voir à partir de cela qu'undéfini est un attribut de l'objet window, mais ce n'est pas un attribut de l'objet anObj.
Remarque : bien que non défini soit une propriété ayant une signification particulière, ce n'est pas un mot-clé réservé en JavaScript.
Lorsqu'undéfini participe à un calcul numérique, le résultat doit être NaN.
À propos, NaN est une autre propriété spéciale de l'objet global (fenêtre), tout comme Infinity. Aucun de ces attributs spéciaux n'est un mot-clé réservé à JavaScript !

Amélioration des performances non définies
Lorsque nous utilisons des valeurs non définies dans le programme, nous utilisons en fait la propriété non définie de l'objet window.
De même, lorsque nous définissons une variable mais ne lui attribuons pas de valeur initiale, par exemple :
var aValue
À ce moment, JavaScript définira sa valeur initiale sur la propriété window.undefined pendant so- appelé référence de précompilation,
Ainsi, lorsque nous comparons une variable ou une valeur avec undéfini, elle est en fait comparée à la propriété undéfinie de l'objet fenêtre. Au cours de ce processus de comparaison, JavaScript recherchera la propriété nommée « non définie » de l'objet fenêtre, puis comparera les pointeurs de référence des deux opérandes pour voir s'ils sont identiques.
Étant donné que l'objet window a de nombreuses valeurs d'attribut, il faudra du temps pour rechercher l'attribut non défini de l'objet window dans chaque comparaison avec undefined. Cela peut constituer un problème de performances dans les fonctions qui nécessitent des comparaisons fréquentes avec undefined.

Parmi eux, lors de la définition d'une variable locale non définie, sa valeur initiale sera une référence à la valeur de la propriété window.undéfinie. La variable locale non définie nouvellement définie existe dans la portée de la fonction. Lors des opérations de comparaison ultérieures, la façon dont le code JavaScript est écrit ne change pas, mais la vitesse de comparaison est très rapide. Étant donné que le nombre de variables dans la portée sera bien inférieur aux propriétés de l'objet fenêtre, la vitesse de recherche des variables sera grandement améliorée.
C'est pourquoi de nombreux frameworks JS front-end définissent souvent eux-mêmes une variable locale non définie !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn