Oggetto JavaScript letterale: cosa è esattamente {a, b, c}?

La domanda che ho è meglio data con questo jsfiddle , il cui codice è qui sotto:

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(da + ', ' + db + ', ' + dc ); alert(e[0] + ', ' + e[1] + ', ' + e[2]); alert(fa + ', ' + fb + ', ' + fc ); 

Che tipo di struttura dati è f ? E ‘solo una scorciatoia per d ?

È una scorciatoia di proprietà di Initializer di oggetti in ES6.

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

Questo funziona perché il valore della proprietà ha lo stesso nome dell’identificatore di proprietà. Questa è una nuova aggiunta alla syntax di Initializer object ( sezione 11.1.5 ) nell’ultima bozza di Reverb ECMAScript 6 . E, naturalmente, proprio come le limitazioni impostate da ECMAScript 3, non è ansible utilizzare una parola riservata come nome della proprietà.

Una simile stenografia non cambierà drasticamente il tuo codice, ma rende tutto un pochino più dolce!

 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. } 

Si prega di consultare la tabella di compatibilità per il supporto di queste annotazioni. In ambienti non di supporto, queste annotazioni porteranno a errori di syntax.

Questa notazione abbreviata offre molto bene l’abbinamento degli oggetti:

In ECMAScript5 cosa facevamo:

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

Può essere fatto in ECMAScript6 con una singola riga di codice:

 var { op, lhs, rhs } = getData(); 
 var f = {a, b, c}; 

È arrivato con ES6 (ECMAScript 2015) e significa esattamente lo stesso di:

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

Si chiama Object Literal Property Value Shorthands (o semplicemente valore di proprietà stenografia, proprietà stenografiche).

Puoi anche combinare le stenografie con l’inizializzazione classica:

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

Per ulteriori informazioni, vedere Object initializer .

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

Definisce un object in JavaScript utilizzando la nuova notazione ECMAScript 2015:

Come per Mozilla Developer Network :

"Gli oggetti possono essere inizializzati usando il nuovo Object (), Object.create () o usando la notazione letterale (notazione inizializzatore). Un inizializzatore dell'object è un elenco di zero o più coppie di nomi di proprietà e valori associati di un object, racchiusi in parentesi graffe ({})."

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

è equivalente a:

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