2009-10-13 8 views
17

J'ai utilisé JavaScript depuis quelques années et ne se souciait jamais de la différence entre null & undefined auparavant, j'utilise toujours undefined pour valider l'existence de l'objet. Mais récemment, je suis passé par this article. Ici, ils ont ditLorsque JavaScript renvoie null & undefined?

JavaScript établit une distinction entre nulle, ce qui est un objet de type « objet » qui indique un volontaire non-valeur, et non définie, qui est qui indique une valeur non initialisée un objet de type « non défini » - que est, une valeur n'a même pas encore été attribuée. Nous parlerons des variables plus tard, mais en JavaScript il est possible de déclarer une variable sans lui assigner de valeur. Si vous faites cela, le type de la variable est indéfini.

Je suis complètement confus maintenant, ce qui est exactement non-valeur ici. Comment cette non-valeur diffère de undefined. Et quelles sont les circonstances javascript renvoie null.

J'ai essayé l'exemple ci-dessous

var sam; 
alert(sam); // returns undefined 

Et

try { 
    //var sam; 
    alert(sam); 
} catch(ex) { } // exception says: sam is undefined 

Et je ne suis pas sûr quand js retour nulls. Quelqu'un peut-il me clarifier.

+1

http://stackoverflow.com/questions/801032/nul l-object-in-javascript – rahul

+0

merci phoenix pour le lien .. il m'aide à comprendre les différences .. mais pouvez-vous me partager un échantillon de code javascript renvoie null ... ?? parce que je peux coulndt savoir quand il renvoie null .. – RameshVel

+0

Voir ce qui se passe si vous définissez undefined = 'quelque chose';) – powtac

Répondre

14

alerte (sam); // renvoie undefined

Non, c'est une exception.

Vous obtenez undefined lorsque vous accédez à une propriété non définie; vous obtenez une erreur lorsque vous utilisez un nom non défini directement.

Les variables globales sont intéressantes parce qu'elles sont accessibles soit à l'aide d'un simple nom de variable, ou en utilisant les propriétés de l'objet global window:

alert(window.sam);  // undefined 
alert(window['sam']); // undefined 
alert('sam' in window); // false 
alert(sam);    // ERROR 

Si sam est déclarée mais non initialisées, l'accès window.sam encore vous obtient undefined, mais pour une raison différente: il y a une entrée dans l'objet window pour sam, mais elle pointe sur le même objet undefined que lorsque vous accédez à une propriété non existante.

var sam; 
alert(window.sam);  // undefined 
alert(window['sam']); // undefined 
alert('sam' in window); // ** true 
alert(sam);    // ** undefined 

Ceci est bien sûr un désordre sanglant confus; undefined est l'une des pires erreurs dans la conception du langage JavaScript. D'autre part, c'est bien et fonctionne à peu près de la même manière que les valeurs null/nil/void/None dans d'autres langages. Cela ne vient pas dans tout ce qui précède.

+0

merci pour la réponse bobince ... comme je comprends js ne retourne jamais nulle à tout moment sauf si nous définissons variable = null ... suis-je droit .. – RameshVel

+0

Yep. 'null' est une valeur normale qui n'apparaît pas à moins que vous ne le demandiez spécifiquement. 'undefined' est le seul qui surgit magiquement de nulle part grâce au langage lui-même. (Attention, cependant: avec le comparateur normal à deux égales, 'undefined == null'.) – bobince

+1

" mais il pointe vers le même objet 'undefined'"? Sûrement, vous vouliez dire - a la même valeur 'undefined'. – kangax

2
<script type="text/javascript"> 
// variable with an unasigned value 
var a; 
if (a == undefined) { 
    alert('a is undefined'); 
} 

if (a == null) { 
    alert('a is undefined'); 
} 

// this will produce an error 
if (b == undefined) { 
    alert('b is undefined'); 
} 

// this is the right way to handle not defined variables 
if (typeof(c) == 'undefined') { 
    alert('c is blabla'); 
} 
</script> 
1

La façon dont je les distingue est undefined être « Je ne l'ai pas défini cette valeur », et nul étant « Je l'ai défini cette valeur, mais je ne sais pas ou ne peut pas comprendre ce que la valeur devrait être."

+0

vraiment? difficile à croire. déclaration douteuse ... – Martian2049

2

Pour qu'une variable reçoive une valeur nulle, elle doit être affectée null est utilisé pour indiquer une valeur inconnue ou ne s'en soucie pas undefined d'autre part est conçu pour indiquer que la propriété accédée n'a jamais été affectée une valeur. cela diffère de null.

Avec null on est délibérément en disant: « Je ne sais pas quelle valeur cela devrait avoir encore » ou « Je ne me soucie pas quelle valeur cela est en ce moment ». OTH dans undefined est en disant vraiment "Etes-vous sûr que vous devriez utiliser cette valeur, il n'a pas été attribué"

+0

merci Anthony .. c'est wat j'ai attendu .. donc js ne retourne jamais nulle à tout moment à moins que nous définissions variable = null .. suis-je droit .. ?? – RameshVel

+0

@Remesh: votre utilisation du mot "renvoie" est un peu déroutant. Fonctions "retour" des valeurs. Je pense que ce que vous voulez dire, c'est qu'étant donné qu'une valeur n'a jamais été affectée à une variable, elle ne pourrait jamais avoir la valeur null. C'est correct – AnthonyWJones

+0

si nous n'avons pas initialisé une variable, js assigne (renvoie) undefined .. de la même manière quand l'objet est annulé par javascript, comme je sais qu'il ne serait assigné explicitement par var = null; – RameshVel

Questions connexes