2012-10-30 6 views
28

Ich habe verschiedene Codebeispiele mit Variablen deklariert und auf undefined und null gesetzt. Wie zum Beispiel:Wann initialisiere ich Variablen in JavaScript mit null oder gar nicht?

var a; // undefined - unintentional value, object of type 'undefined' 
var b = null; // null - deliberate non-value, object of type 'object' 

Wenn der Code dieser Erklärungen ordnet einen Wert eines oder b, was ist der Grund für die Verwendung einer Art von Erklärung über die andere zu folgen?

Antwort

22

Das erste Beispiel weist der Variablen nichts zu, daher bezieht es sich implizit auf den Wert undefined (Details siehe 10.5 in the spec). Es wird häufig verwendet, wenn Variablen zur späteren Verwendung deklariert werden. Es ist nicht nötig, ihnen vorher explizit etwas zuzuweisen.

Das zweite Beispiel ist explizit null zugewiesen (das ist eigentlich vom Typ null, aber aufgrund einer Eigenart der JavaScript-Spezifikation Ansprüche Typ "Objekt"). Es wird häufig verwendet, um einen bereits in einer vorhandenen Variablen gespeicherten Wert zu löschen. Es könnte als robuster angesehen werden, null zu verwenden, wenn der Wert gelöscht wird, da es möglich ist, undefined zu überschreiben, und in dieser Situation würde das Zuweisen von undefined zu unerwartetem Verhalten führen.

Als Nebenwirkung, dass Marotte von null ist ein guter Grund, eine robustere Form von Typprüfung zu verwenden:

Object.prototype.toString.call(null); // Returns "[object Null]" 
+0

Nur ein Hinweis ... ich denke, die ' "[object null]"' Ergebnis von 'toString() 'kann haben einige Browserinkompatibilitäten. –

6

ich diesen Link nur sah, die meine Frage geklärt. What reason is there to use null instead of undefined in JavaScript?

Javascript für Web-Entwickler heißt es: „Wenn Sie eine Variable definieren, die später gemeint ist, um ein Objekt zu halten, empfiehlt es sich, die Variable zu initialisieren, im Gegensatz zu irgendetwas anderes auf null. Auf diese Weise explizit für den Wert zu überprüfen null, um festzustellen, ob die Variable zu einem späteren Zeitpunkt mit einer Objektreferenz gefüllt wurde. "

+3

+1 Das klingt wie eine gute Übung zu folgen – techfoobar

0

null ist ein Objekt .. Wenn etwas undefiniert ist, ist es nichts .. es ist kein Objekt, auch kein String, weil es noch nicht definiert wurde .. offensichtlich .. dann ist es einfach eine Eigenschaft mit nein Funktion ..

Beispiel:

Sie deklarieren eine Variable mit var aber nie eingestellt es.

var foo; 
alert(foo); //undefined. 

Sie versuchen, auf eine Eigenschaft eines Objekts zuzugreifen, das Sie noch nie festgelegt haben.

var foo = {}; 
alert(foo.bar); //undefined 

Sie versuchen, auf ein Argument zuzugreifen, das nie bereitgestellt wurde.

10

Ich glaube nicht, dass es einen besonders besseren Weg gibt, Dinge zu tun, aber ich bin geneigt, undefiniert so viel wie möglich zu vermeiden. Vielleicht liegt es an einem starken OOP-Hintergrund.

Wenn ich versuche, OOP mit Javascript zu imitieren, würde ich explizit meine Variablen auf null deklarieren und initialisieren (genau wie OOP-Sprachen, wenn Sie eine Instanzvariable deklarieren, ohne sie explizit zu initialisieren). Wenn ich sie nicht initialisiere, warum sollte ich sie überhaupt erst erklären? Wenn Sie beim Debuggen keinen Wert für eine Variable festgelegt haben, die Sie beobachten, wird dies als nicht definiert angezeigt, unabhängig davon, ob Sie sie deklariert haben oder nicht ...

Ich ziehe halten undefined für bestimmte Verhaltensweisen:

  • , wenn Sie eine Methode aufrufen, jedes Argument Sie bieten keine undefinierten Wert haben würde. Gute Möglichkeit, ein optionales Argument zu haben und ein bestimmtes Verhalten zu implementieren, wenn das Argument nicht definiert ist.
  • faul init ... in meinem Buch undefined bedeutet "nicht initialisiert: Go holen den Wert", und null bedeutet "initialisiert, aber der Wert war null (zB gab es vielleicht einen Serverfehler?)"
  • arrays: myArray [myKey] === Null, wenn für diesen Schlüssel ein Nullwert vorhanden ist, undefiniert, wenn für diesen Schlüssel kein Wert festgelegt wurde.

aber vorsichtig sein, dass myVar == null und myVar == undefined denselben Wert zurückgeben, ob meineVar sonst nicht definiert, null oder etwas ist. Verwenden Sie ===, wenn Sie wissen möchten, ob eine Variable nicht definiert ist.

+0

In der letzten Zeile sollte beachtet werden, dass nichts '===' (Tripel gleich) 'null' außerhalb von' null' selbst (da es ein "Objekt" ist). –

1

würde ich ausdrücklich null wählen, haben nicht ein Objekt, dessen ID später ohnehin überschrieben worden wäre:

var foo = {}; // empty object, has id etc. 
var foo2 = null; // good practice, // filled with an object reference at a later time 
var foo3;// undefined, I would avoid it 
console.log(typeof foo); 
console.log(typeof foo2); 
console.log(typeof foo3); 

null sorgt auch für eine gute Lesbarkeit der Datentyp (Objekt) zu identifizieren, Ergebnisse in

object 
object 
undefined 

Quelle (Professional JavaScript für Web-Entwickler 3rd Edition):

Wenn eine Variable definiert wird, die später ein Objekt halten soll, ist es ratsam die Variable auf Null zu setzen, im Gegensatz zu allem anderen else. Auf diese Weise können Sie explizit überprüfen für den Wert null auf festzustellen, ob die Variable mit einem Objekt Bezug auf einen späteren Zeitpunkt, wie in diesem Beispiel ausgefüllt:

if (foo2 != null){ 
    //do something with foo2 
} 

Der Wert undefined ist ein Derivat von null, so ECMA-262 sie wie folgt oberflächlich gleich sein definiert:

console.log(null == undefined); // prints true 
console.log(null === undefined);// prints false 
+0

Vielleicht könnten Sie die Antwort bearbeiten und einige Referenzlinks und Argumentationen hinzufügen. "Good Practice" ist nichts anderes als eine Meinung. –

+1

Ich habe das Nachschlagewerk hinzugefügt, auch "nur ein Buch" nicht Norm – ItsmeJulian

Verwandte Themen