it-swarm.com.de

Wann initialisiere ich Variablen in JavaScript mit Null oder gar nicht?

Ich habe verschiedene Codebeispiele mit deklarierten Variablen gesehen, die auf undefined und null gesetzt sind. Sowie:

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

Wenn der Code, der diesen Deklarationen folgt, einem oder einem Wert von b einen Wert zuweist, was ist der Grund für die Verwendung eines Deklarationstyps gegenüber einem anderen?

31
KMcA

Das erste Beispiel weist der Variablen nichts zu, daher bezieht sie sich implizit auf den Wert undefined (siehe 10.5 in der Spezifikation für Details). Es wird häufig verwendet, wenn Variablen für die spätere Verwendung deklariert werden. Es ist nicht notwendig, ihnen vorher explizit etwas zuzuweisen.

Das zweite Beispiel wird explizit null zugewiesen (was eigentlich vom Typ null ist, aber aufgrund einer Eigenheit der JavaScript-Spezifikation behauptet, dass es den Typ "object" hat). Sie wird häufig verwendet, um einen Wert zu löschen, der bereits in einer vorhandenen Variablen gespeichert ist. Es kann als robuster erachtet werden, null beim Löschen des Werts zu verwenden, da undefined überschrieben werden kann. In diesem Fall würde die Zuweisung von undefined zu unerwartetem Verhalten führen.

Abgesehen davon ist diese Seltsamkeit von null ein guter Grund, eine robustere Form der Typprüfung zu verwenden:

Object.prototype.toString.call(null); // Returns "[object Null]"
27
James Allardice

Ich glaube nicht, dass es eine bessere Art gibt, Dinge zu tun, aber ich neige dazu, undefiniert so weit wie möglich zu vermeiden. Vielleicht liegt es an einem starken OOP Hintergrund.

Wenn ich versuche, OOP mit Javascript zu imitieren, würde ich meine Variablen im Allgemeinen explizit als null deklarieren und initialisieren (wie OOP -Sprachen, wenn Sie eine Instanzvariable deklarieren, ohne sie explizit zu initialisieren) ..__ werde sie nicht initialisieren, warum sogar überhaupt deklarieren? Wenn Sie beim Debuggen keinen Wert für eine überwachte Variable festgelegt haben, wird der Wert als undefiniert angezeigt, unabhängig davon, ob Sie ihn deklariert haben oder nicht.

Ich ziehe es vor, undefined für bestimmte Verhaltensweisen zu behalten:

  • wenn Sie eine Methode aufrufen, hätte jedes Argument, das Sie nicht angeben, einen undefinierten Wert. Eine gute Möglichkeit, ein optionales Argument zu haben, das ein bestimmtes Verhalten implementiert, wenn das Argument nicht definiert ist.
  • lazy init ... in meinem Buch bedeutet undefined "nicht initialisiert: Geh, hol den Wert ab", und null bedeutet "initialisiert, aber der Wert war null (z. B. gab es möglicherweise einen Serverfehler?)"
  • arrays: myArray [myKey] === null, wenn für diesen Schlüssel ein Nullwert angegeben ist, undefined, wenn für diesen Schlüssel noch kein Wert festgelegt wurde.

Achten Sie jedoch darauf, dass myVar == null und myVar == undefined denselben Wert zurückgeben, unabhängig davon, ob myVar undefined, null oder etwas anderes ist. Verwenden Sie ===, wenn Sie wissen möchten, ob eine Variable undefiniert ist.

10

Ich habe gerade diesen Link gesehen, der meine Frage klarstellte. Welchen Grund gibt es in JavaScript, anstelle von undefined null zu verwenden?

Javascript for Web Developers gibt an: "Wenn Sie eine Variable definieren, die später ein Objekt enthalten soll, ist es ratsam, die Variable auf null zu initialisieren. Im Gegensatz dazu können Sie explizit nach dem Wert null suchen, um festzustellen, ob die Variable vorliegt wurde zu einem späteren Zeitpunkt mit einer Objektreferenz gefüllt. "

7
KMcA

Ich würde explizit null wählen, um kein Objekt zu haben, 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, um den Datentyp (Objekt) zu identifizieren

object
object
undefined

Quelle (professionelles JavaScript für Web Developers 3rd Edition):

Wenn Sie eine Variable definieren, die später ein Objekt enthalten soll, lautet sie Es ist ratsam, die Variable auf null anstatt auf irgendetwas zu initialisieren sonst. Auf diese Weise können Sie explizit nach dem Wert null für .__ suchen. Stellen Sie fest, ob die Variable unter .__ mit einer Objektreferenz gefüllt wurde. zu einem späteren Zeitpunkt, wie in diesem Beispiel:

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

Der Wert undefined ist eine Ableitung von null. ECMA-262 definiert sie daher oberflächlich als gleich:

console.log(null == undefined); // prints true
console.log(null === undefined);// prints false
1
ItsmeJulian

null ist ein Objekt .. Wenn etwas undefiniert ist, ist es nichts. Es ist kein Objekt und auch keine Zeichenfolge, weil es noch nicht definiert wurde .. offensichtlich .. dann ist es einfach eine Eigenschaft ohne Funktion .. 

beispiel:

Sie deklarieren eine Variable mit var, setzen sie aber nie.

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.

function myFunction (foo) {
  alert(foo); //undefined.
}
0
Dimser