2009-10-13 18 views
17

Ich benutze JavaScript seit einigen Jahren und kümmerte mich nie um den Unterschied zwischen null & undefined früher, verwende ich immer undefined, um die Existenz des Objekts zu validieren.Wenn JavaScript null undefined zurückgibt?

Aber vor kurzem kam ich durch this article. Hier sagten sie

JavaScript zwischen null unterscheidet, der ein Objekt vom Typ ‚Objekt‘, das einen absichtlichen nicht-Wert zeigt, und undefinierte, die ein Objekt des Typs ‚undefiniert‘, den einen nicht initialisierten Wertes anzeigt - daß ist, ein Wert wurde noch nicht einmal vergeben. Wir werden später über Variablen sprechen, aber in JavaScript ist es möglich, eine Variable zu deklarieren, ohne ihr einen Wert zuzuweisen. Wenn Sie dies tun, ist der Typ der Variablen nicht definiert.

Ich bin jetzt völlig verwirrt, was genau hier nicht wert ist. Wie unterscheidet sich dieser Nichtwert von undefined? Und unter welchen Umständen gibt javascript null zurück.

ich versucht haben, die unterhalb Probe

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

Und

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

Und ich bin nicht sicher, wenn js nulls zurück. Kann mir jemand erklären?

+1

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

+0

danke phoenix für den link .. es hilft mir, die unterschiede zu verstehen .. aber können sie mir ein code-beispiel javascript gibt null ...? weil ich coulndt herausfinden kann, wenn es null zurückgibt. – RameshVel

+0

Sehen Sie, was passiert, wenn Sie undefined = 'etwas' einstellen;) – powtac

Antwort

14

Warnung (sam); // gibt undefined zurück

Nein, das ist eine Ausnahme.

Sie erhalten undefined, wenn Sie auf eine nicht festgelegte Eigenschaft zugreifen; Sie erhalten einen Fehler, wenn Sie einen nicht festgelegten Namen direkt verwenden.

Globale Variablen sind interessant, weil sie entweder mit einer einfachen Variablennamen zugegriffen werden kann, oder durch die Eigenschaften des window globalen Objekts mit:

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

Wenn sam deklariert, aber nicht initialisiert, window.sam Zugriff Sie noch bekommt undefined, aber aus einem anderen Grund: Es gibt einen Eintrag im Objekt window für sam, aber es zeigt auf das gleiche undefined Objekt wie Sie erhalten, wenn Sie auf eine nicht existierende Eigenschaft zugreifen.

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

Dies ist natürlich eine verwirrende blutige Sauerei; undefined ist einer der schlimmsten Fehler im Design der JavaScript-Sprache.

null auf der anderen Seite ist in Ordnung und funktioniert genauso wie null/nil/void/None-Werte in anderen Sprachen. Es kommt nicht zu den oben genannten.

+0

danke für die Antwort bobince ... wie ich verstehe js gibt nie null in jeder Zeit zurück, wenn wir Variable = null setzen ... bin ich richtig .. – RameshVel

+0

Yep. "null" ist ein normaler Wert, der nicht angezeigt wird, es sei denn, Sie fragen ausdrücklich danach. "undefined" ist die einzige, die dank der Sprache magisch aus dem Nichts auftaucht. (Aber Vorsicht: mit dem normalen Doppel-Gleich-Komparator, undefined == null.) – bobince

+1

"aber es zeigt auf das gleiche' undefined' Objekt "? Sicher, du wolltest sagen - hat den gleichen "undefinierten" Wert. – 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

Die Art, wie ich sie zu unterscheiden ist undefiniert „Ich habe diesen Wert nicht definiert“, und null zu sein: „Ich habe diesen Wert festgelegt, aber ich weiß nicht, oder kann nicht herausfinden, was sollte der Wert sein."

+0

wirklich? Kaum zu glauben. zweifelhafte Aussage ... – Martian2049

2

Für eine Variable einen Nullwert erhalten zugewiesen werden müssen. null verwendet wird, ein unbekanntes, um anzuzeigen, oder nicht Wert kümmern. undefined auf der anderen Seite ist so konzipiert, um anzuzeigen, dass die propery zugegriffen wird, hat ben nie zugewiesen ein Wert. Dies unterscheidet sich von null.

Mit null man bewusst sagen: „ich weiß nicht, welchen Wert diese noch haben sollte“ oder „ich interessiere mich nicht, welchen Wert dieses Recht jetzt ist“. OTH in undefined ist "Sind Sie sicher, dass Sie diesen Wert verwenden sollten, der nicht zugewiesen wurde".

+0

danke Anthony .. das ist wat ich habe erwartet .. so js gibt nie null in jeder Zeit, wenn wir Variable = null .. bin ich richtig .. ?? – RameshVel

+0

@Remesh: Ihre Verwendung des Wortes "Returns" ist ein wenig verwirrend. Funktionen geben Werte zurück. Ich denke, was Sie beabsichtigen zu etablieren ist, dass angesichts der Tatsache, dass eine Variable nie einen Wert zugewiesen wurde, sie niemals den Wert Null haben könnte. Das ist richtig. – AnthonyWJones

+0

Wenn wir eine Variable nicht initialisiert haben, ordnet js (und liefert) undefined .. auf die gleiche Weise zu, wenn das Objekt von Javascript nulled wird, da ich weiß, dass es nur explizit von var = null zugewiesen wird; – RameshVel

Verwandte Themen