Javascript对象文字:究竟是{a,b,c}?

我所拥有的问题最好通过这个jsfiddle给出 ,代码如下:

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

什么样的数据结构是f ? 这只是d的简写吗?

 var f = {a, b, c}; 

它带有ES6(ECMAScript 2015),意思与以下内容完全相同:

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

它被称为Object Literal Property Shorthands(或简称属性值速记,速记属性)。

您也可以将短手与经典的初始化结合起来:

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

有关更多信息,请参阅Object initializer 。

它是ES6中的对象初始化器属性速记 。

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

这是因为属性值与属性标识符具有相同的名称。 这是对最新的ECMAScript 6草案修订版13中对象初始化程序 ( 第11.1.5节 )的语法的新增加。 当然,就像从ECMAScript 3中设置的限制一样,您不能使用保留字作为您的属性名称。

这样的简写不会显着改变你的代码,它只会使一切都变得更加甜美!

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

请参阅兼容性表以获取对这些符号的支持。 在不支持的环境中,这些符号将导致语法错误。

这个简写符号很好地提供了对象匹配:

ECMAScript5中 ,我们曾经这样做过:

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

可以在ECMAScript6中用一行代码完成:

 var { op, lhs, rhs } = getData(); 
 var f = {a, b, c}; // <--- what exactly is this?? 

它使用新的ECMAScript 2015符号在JavaScript中定义一个对象:

根据Mozilla开发者networking :

“对象可以使用新的Object(),Object.create()或使用文字符号(初始化符号)进行初始化。对象初始值设定项是零对或多对属性名称和对象的关联值的列表,大括号 ({})。”

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

相当于:

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