什么是 JavaScript 速记属性?

IT技术 javascript
2021-03-12 21:04:08
var obj = { prop = [1,2,3] };

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

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

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

3个回答

在 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在上面的例子),但它不是一个正确的属性名称。

@Jwan622 No.{ s, n }在语法上等价于{ s: s, n: n }{ s: 'abc', n: 1 }在这种情况下将被评估为
2021-04-18 21:04:08
我不认为是无效的属性名称与它有什么关系?更改prop为其他任何内容都会产生相同的错误。
2021-05-14 21:04:08
你的意思是这相当于对{ s: 'abc', n: 1 }不对?
2021-05-14 21:04:08

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

SyntaxError: missing : after property id

也就是说,缺少一个:. 正如你所说,你应该使用:而不是=.

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

snak 的猜测是 Chrome 指的是一个PropertyDefinition,它由一个IdentifierReference组成,在ObjectLiteral 中使用显然prop = [1,2,3]不是IdentifierReference,所以抱怨它可能是有意义的。它将使更多的意义,抱怨说这不是一个PropertyDefinition中的更常见的形式属性名 : AssignmentExpressionMethodDefinition

@EvanTrimboli 是的。你应该在字里行间阅读。我的回答是试图以一种礼貌的方式说“停止使用像 Chrome 这样的愚蠢浏览器,它会提供这种毫无意义的误导性错误消息”。
2021-04-18 21:04:08
@EvanTrimboli 问题是“在此错误消息的上下文中,“速记属性”是什么意思?”。答案是“这只是您的浏览器决定在那里显示的一些垃圾随机消息”,其他浏览器使用更好的消息。
2021-04-24 21:04:08
它们通常被称为速记属性初始化器:developer.mozilla.org/en/docs/Web/JavaScript/Reference/...
2021-05-03 21:04:08
好吧,这仍然没有回答问题。
2021-05-06 21:04:08
问题已经说明了这一点:“上面的代码包含一个错字,应该有一个冒号而不是 =。问题是为什么错误是这样表述的。
2021-05-13 21:04:08

由于 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"};