Warum funktioniert obj = {x, y} in Chrome?

8
%Vor%

Offensichtlich war das mein Tippfehler, {x,y} hätte {x: x, y: y} sein sollen. Aber es tut was ich will, in Chrome, Feld x bekommt den Wert einer lokalen Variablen x .

Aber warum funktioniert es?

    
exebook 16.06.2015, 19:08
quelle

2 Antworten

11

Es ist Teil des ECMAScript 2015 (oder ECMAScript 6). Sie können neue Eigenschaften in Objects in Object-Literalen erstellen, indem Sie einfach die Bezeichner angeben.

Zitieren MDNs Objektinitialisierer-Eigenschaftsdefinitionen ,

  

Mit ECMAScript 6 steht eine kürzere Notation zur Verfügung, um dasselbe zu erreichen:

%Vor%

Der entsprechende Abschnitt in der ECMAScript 6-Spezifikation lautet hier .

  

AssignmentProperty : BezeichnerReferenz Initialisierer opt

     
  1. Sei P StringValue von BezeichnerReferenz .
  2.   
  3. Sei lref ResolveBinding ( P ).
  4.   
  5. ReturnIfAbrupt ( P ).
  6.   
  7. Sei v GetV ( Wert , P ).
  8.   
  9. ReturnIfAbrupt ( v ).
  10.   
  11. Wenn Initialisierer opt vorhanden ist und v undefiniert ist, dann      
    1. Lassen Sie defaultValue das Ergebnis der Evaluierung von Initialisierer sein.
    2.   
    3. Sei v GetValue ( defaultValue ).
    4.   
    5. ReturnIfAbrupt ( v ).
    6.   
    7. Wenn IsAnonymousFunctionDefinition ( Initialisierer ) true ist, dann      
      1. Lassen Sie hasennameProperty HasOwnProperty ( v , "name") sein.
      2.   
      3. ReturnIfAbrupt ( hasNameProperty ).
      4.   
      5. Wenn hasNameProperty false ist, führen Sie SetFunctionName ( v , P ).
      6. aus   
    8.   
  12.   
  13. Gib PutValue ( lref , v ) zurück.
  14.   

Grundsätzlich besagt die Spezifikation, dass, wenn Sie nur einen Bezeichner verwenden, eine neue Eigenschaft mit dem Namen des Bezeichners erstellt wird und der Wert der tatsächliche Wert dieses Bezeichners ist. Es kann sogar ein Name der Funktion sein.

%Vor%     
thefourtheye 16.06.2015, 19:15
quelle
5

ES2015 verfügt über erweiterte Objektliteralnotation. Chrome 43ish unterstützt dies (teilweise).

Babel hat eine gute Erklärung.

    
Nathanael Smith 16.06.2015 19:13
quelle

Tags und Links