Frage Javascript Objektliteral: Was genau ist {a, b, c}?


Die Frage, die ich habe, wird am besten gegeben dieses Spiel, der Code dafür ist:

var a = 1, b = 'x', c = true;

var d = {a: a, b: b, c: c}; // <--- object literal
var e = [a, b, c];          // <--- array
var f = {a, b, c};          // <--- what exactly is this??

// these all give the same output:
alert(d.a  + ', ' + d.b +  ', ' + d.c );
alert(e[0] + ', ' + e[1] + ', ' + e[2]);
alert(f.a  + ', ' + f.b +  ', ' + f.c );

Was für eine Datenstruktur ist das? f? Ist es nur eine Kurzform für? d?


75
2017-12-22 11:22


Ursprung


Antworten:


Es ist ein Objektinitialisierer Eigenschaft Kurzschrift in ES6.

var f = {a, b, c, d:1}; // Will be equal to {a:a, b:b, c:c, d:1}

Dies funktioniert, weil der Eigenschaftswert den gleichen Namen wie die Eigenschaftskennung hat. Dies ist eine neue Ergänzung der Syntax von Objektinitialisierer (Abschnitt 11.1.5) spätestens ECMAScript 6 Entwurf Rev 13. Und genau wie die Einschränkungen, die in ECMAScript 3 festgelegt wurden, können Sie ein reserviertes Wort nicht als Ihren Eigenschaftsnamen verwenden.

Solch eine Kurzschrift wird Ihren Code nicht dramatisch verändern, er macht alles nur ein bisschen süßer!

function createCar(name, brand, speed) {
  return { type: 'Car', name: name, brand: brand, speed: speed };
}

// With the new shorthand form
function createSweetCar(name, brand, speed) {
  return { type: 'Car', name, brand, speed }; // Yes it looks sweet.
}

Informationen zur Unterstützung dieser Notationen finden Sie in der Kompatibilitätstabelle. In nicht unterstützenden Umgebungen führen diese Notationen zu Syntaxfehlern.

Diese Kurzschreibweise bietet ein sehr passendes Objekt:

Im ECMAScript5 was wir früher gemacht haben:

var tmp = getDate();
var op  = tmp.op;
var lhs = tmp.lhs;
var rhs = tmp.rhs;

Kann in gemacht werden ECMAScript6 mit einer einzigen Codezeile:

var { op, lhs, rhs } = getData();

58
2017-12-22 11:24



var f = {a, b, c};

Es kam mit ES6 (ECMAScript 2015) und bedeutet genau das gleiche wie:

var f = {a: a, b: b, c: c};

Es wird als Objekt Literal-Eigenschaftswert Shorthands (oder einfach Eigenschaftswert-Kurzschrift, Kurzschrift-Eigenschaften) bezeichnet.

Sie können Shorthands auch mit klassischer Initialisierung kombinieren:

var f = {a: 1, b, c};

Für weitere Informationen siehe Objektinitialisierer.


75
2017-12-22 11:23



var f = {a, b, c};          // <--- what exactly is this??

Es definiert ein Objekt in JavaScript mit der neuen ECMAScript 2015-Notation:

Nach Mozilla-Entwickler-Netzwerk:

"Objekte können mit new Object (), Object.create () oder mithilfe der Literal-Notation (Initialisierer-Notation) initialisiert werden. Ein Objektinitialisierer ist eine Liste von null oder mehr Paaren von Eigenschaftsnamen und zugehörigen Werten eines Objekts, eingeschlossen in Geschweifte Klammern ({})."

var a = "foo", 
    b = 42, 
    c = {};

// Shorthand property names (ES6)
var o = { a, b, c }; 

ist äquivalent zu:

var a = "foo", 
    b = 42,
    c = {};

var o = { 
  a: a,
  b: b,
  c: c
};

12
2017-12-22 11:30