Literal de object Javascript: o que exatamente é {a, b, c}?

A questão que tenho é melhor dada por meio deste jsfiddle , cujo código está abaixo:

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 ); 

Que tipo de estrutura de dados é f ? É apenas um atalho para d ?

É uma abreviação de propriedade de inicializador de object no ES6.

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

Isso funciona porque o valor da propriedade possui o mesmo nome do identificador de propriedade. Esta é uma nova adição à syntax do Inicializador de Objetos ( seção 11.1.5 ) no último rascunho do ECMAScript 6 Rev 13 . E, claro, assim como as limitações definidas no ECMAScript 3, você não pode usar uma palavra reservada como seu nome de propriedade.

Essa taquigrafia não vai mudar drasticamente o seu código, apenas torna tudo um pouco mais doce!

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

Por favor, consulte a tabela de compatibilidade para suporte para estas notações. Em ambientes sem suporte, essas notações levarão a erros de syntax.

Esta notação abreviada oferece correspondência de objects muito bem:

No ECMAScript5, o que costumávamos fazer:

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

Pode ser feito em ECMAScript6 com uma única linha de código:

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

Ele veio com ES6 (ECMAScript 2015) e significa exatamente o mesmo que:

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

É chamado Shorthands do Valor da Propriedade Literal do Objeto (ou simplesmente propriedades de taquigrafia de valor de propriedade, abreviadas).

Você também pode combinar atalhos com boot clássica:

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

Para mais informações, consulte Inicializador de objects .

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

Ele define um object em JavaScript usando a nova notação ECMAScript 2015:

De acordo com a Mozilla Developer Network :

"Os objects podem ser inicializados usando o novo Object (), Object.create () ou usando a notação literal (notação inicializadora). Um inicializador de object é uma lista de zero ou mais pares de nomes de propriedades e valores associados de um object, incluídos em chaves ({}). "

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