Eigenschaftswert eines String-Objekts in JavaScript

8

Soweit ich verstehe, ist jeder String ein Objekt in Javascript. Dennoch "funktioniert es nicht", wie ich es erwarte:

%Vor%

Wenn ich jedoch versuche, einen String "falsch" zu definieren, funktioniert alles wie erwartet

%Vor%

Warum ist das so?

    
naivists 29.04.2010, 17:43
quelle

3 Antworten

8

Sie könnten daran interessiert sein, den ersten Teil dieses Artikels auszuprobieren:

Zitieren:

  

Es gibt zwei verschiedene Arten von Strings und sie verhalten sich ganz anders. Ein Literal wird nur durch Anführungszeichen in der Zeichenfolge erstellt. Ein Objekt wird durch implizite Verwendung des neuen Schlüsselworts erstellt. Wenn Sie einer Variablen mithilfe des Schlüsselworts "String" eine Zeichenfolge zuweisen, wird der Inhalt der Klammer ohne das neue Schlüsselwort als Zeichenfolgenliteral umgewandelt.

     

Ein String-Literal hat Zugriff auf alle Objekte und Methoden eines Strings, weil Javascript ein String-Literal vorübergehend als String-Objekt interpretiert, um die gewünschte Methode auszuführen.

     

Wo beide sich unterscheiden, ist ihre Behandlung neuer Eigenschaften und Methoden. Wie alle Javascript-Objekte können Sie jedem String-Objekt Eigenschaften und Methoden zuweisen.

     

Sie können einem Zeichenfolgenliteral keine Eigenschaften oder Methoden hinzufügen. Sie werden vom Interpreter ignoriert.

     

Der Grund, warum Sie einem String-Literal keine Eigenschaften oder Methoden hinzufügen können, besteht darin, dass der Javascript-Interpreter den Wert der Zeichenfolge vorübergehend in ein neues Objekt kopiert und dann die Eigenschaften dieses Objekts verwendet, wenn Sie versuchen, auf die Eigenschaft oder Methode eines Literals zuzugreifen oder Methoden. Das bedeutet, dass ein String-Literal nur auf die Standardeigenschaften oder -methoden eines Strings und auf die als Prototypen hinzugefügten Strings zugreifen kann.

    
Daniel Vassallo 29.04.2010, 17:47
quelle
4

Dies geschieht, weil die Eigenschaft Accessors , ( . und [] ) Konvertieren Sie den Wert ToObject .

Etwas Ähnliches passiert hinter den Kulissen:

%Vor%

Grundsätzlich wird ein Objekt im laufenden Betrieb vom Eigenschaften-Accessor erstellt, siehe Schritt 5:

Die Produktion MemberExpression : MemberExpression [ Expression ] (oder MemberExpression . Identifier ) wird wie folgt ausgewertet:

  1. Werten Sie MemberExpression aus.

  2. Rufen Sie GetValue(Result(1)) auf.

  3. Ausdruck auswerten.

  4. Rufen Sie GetValue(Result(3)) auf.

  5. Rufen Sie ToObject(Result(2)) auf.

  6. Rufen Sie ToString(Result(4)) auf.

  7. Gibt einen Wert vom Typ Reference zurück, dessen Basisobjekt Result (5) ist und dessen Eigenschaftenname Result(6) ist.

CMS 29.04.2010 17:50
quelle
0

Das ist auch interessant zu lesen ... Sind String-Literale Objekte oder nicht?

    
Upperstage 29.04.2010 17:48
quelle

Tags und Links