var obj = { prop = [1,2,3] };
上面的代码包含一个错字,应该有一个冒号而不是=
. 但令我惊讶的是 VM 错误消息:
var obj = { prop = [1,2,3] };
^^^^^^^^^^^^^^
SyntaxError: Invalid shorthand property initializer
我搜索了“JavaScript 速记属性”,但我仍然不清楚这个术语。在此错误消息的上下文中,“简写属性”是什么意思?
var obj = { prop = [1,2,3] };
上面的代码包含一个错字,应该有一个冒号而不是=
. 但令我惊讶的是 VM 错误消息:
var obj = { prop = [1,2,3] };
^^^^^^^^^^^^^^
SyntaxError: Invalid shorthand property initializer
我搜索了“JavaScript 速记属性”,但我仍然不清楚这个术语。在此错误消息的上下文中,“简写属性”是什么意思?
在 ES6 中,您可以使用速记属性名称来编写类似的内容。
var s = 'abc';
var n = 1;
var o = { s, n }; // This is equivalent to { s: s, n: n }
在你的情况下,prop = [1,2,3]
被解析为一个缩写属性(s
以及n
在上面的例子),但它不是一个正确的属性名称。
Firefox 有一个不同的错误信息,在我看来它更有用:
SyntaxError: missing : after property id
也就是说,缺少一个:
. 正如你所说,你应该使用:
而不是=
.
明确地说,“速记属性”在 ES6 规范中没有任何意义。这只是 Chrome 发明的一些表达方式,可以帮助您注意到错误。看来他们失败了。
snak 的猜测是 Chrome 指的是一个PropertyDefinition,它由一个IdentifierReference组成,在ObjectLiteral 中使用。显然prop = [1,2,3]
不是IdentifierReference,所以抱怨它可能是有意义的。它将使更多的意义,抱怨说这不是一个PropertyDefinition中的更常见的形式属性名 :
AssignmentExpression。或MethodDefinition。
由于 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"};