什么是JavaScript速记属性?

时间:2016-08-15 01:51:51

标签: javascript

var obj = { prop = [1,2,3] };

上面的代码包含拼写错误,应该有冒号而不是=。但令我惊讶的是VM错误消息:

var obj = { prop = [1,2,3] };
            ^^^^^^^^^^^^^^
SyntaxError: Invalid shorthand property initializer

我搜索了“JavaScript速记属性”,但这个术语对我来说仍然不清楚。 “速记属性”在此错误消息的上下文中意味着什么?

3 个答案:

答案 0 :(得分:21)

使用ES6,您可以使用简写属性名称来编写类似的内容。

var s = 'abc';
var n = 1;
var o = { s, n }; // This is equivalent to { s: s, n: n }

在您的情况下,prop = [1,2,3]被解析为一个速记属性(上例中的sn),但它不是一个合适的属性名称。

答案 1 :(得分:4)

Firefox有一个不同的错误消息,在我看来更有用:

SyntaxError: missing : after property id

也就是说,缺少:。如您所说,您应该使用:代替=

为清楚起见,“速记属性”在ES6规范中没有任何意义。这只是Chrome发明的一些表达方式,可以帮助您发现错误。看来他们失败了。

snak's guess是指Chrome引用 PropertyDefinition ,其中包含 IdentifierReference ,用于 ObjectLiteral 。显然prop = [1,2,3]不是 IdentifierReference ,因此抱怨它可能是有意义的。在更常见的 PropertyName : AssignmentExpression 形式中抱怨它不是 PropertyDefinition 更有意义。或 MethodDefinition

答案 2 :(得分:1)

由于MDN没有官方解释,我只能假设这可能意味着什么。

请考虑以下事项:

有两种创建数组的方法。

漫长的路(某种程度):

var cars = new Array("Saab", "Volvo", "BMW");

简短的方法:

var cars = ["Saab", "Volvo", "BMW"]; 

在处理对象的创建时,长短路更明显:

漫长的道路:

var person = new Object();
person.firstName = "John";
person.lastName = "Doe";

简短的方法:

var person = {firstName: "John", lastName: "Doe"};