2 Stimmen

Warum ist es legal, eine Eigenschaft festzulegen, die Sie nicht abrufen können?

Ich möchte verstehen, warum es erlaubt ist, einer Zeichenkette oder einem anderen Primitiven eine Eigenschaft zuzuweisen, obwohl JavaScript diesen Wert nie speichert. Ich weiß, dass "xyz" nicht dasselbe ist wie Object("xyz"), aber schaut hier:

var o = "xyz";
o.value = "foo bar";
alert(o.value); // zeigt "undefined"

Die Eigenschaft "value" bleibt direkt nach der Zuweisung undefiniert. Wenn o ein Objekt ist, wird die Eigenschaft "value" ordnungsgemäß zugewiesen und im Alert-Statement zurückgegeben. Wenn o undefiniert ist, führt die Zuweisung der Eigenschaft zu einem TypeError. Aber wenn o eine Zeichenkette ist, passiert überhaupt nichts, die Zuweisung wird einfach ignoriert. Okay, in meinem Beispiel ist o eine Variable, aber auch "xyz".value = "foo bar" ist völlig legal?

4voto

Pointy Punkte 387467

Strings sind keine Objekte. Dies:

 o.value = "foo bar";

bedeutet:

  1. Die Zeichenfolge des "o" in eine String-Instanz konvertieren
  2. Die Eigenschaft "value" dieser Instanz auf "foo bar" setzen
  3. Das String-Objekt verwerfen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X