Javascript JS:在非严格模式下,两个或多个同名的对象属性?

Javascript JS:在非严格模式下,两个或多个同名的对象属性?,javascript,theory,Javascript,Theory,阅读David Flanagan的权威指南(第6版),偶然发现: 在严格模式下,定义对象文字是一个语法错误 具有相同名称的两个或多个属性。(在非严格模式下,无错误 发生。) 我找不到任何例子——这可能吗?我试过了 var obj = {prop: 'foo', prop: 'bar'}; …但当然,我最终只有一个属性(对象{prop:“bar”}),包括严格模式和非严格模式 这取决于实现吗?这本书是2011年版,ECMAScript 5在里面 我应该读一本更新的书吗?这本书是对的;ES5规范指

阅读David Flanagan的权威指南(第6版),偶然发现:

在严格模式下,定义对象文字是一个语法错误 具有相同名称的两个或多个属性。(在非严格模式下,无错误 发生。)

我找不到任何例子——这可能吗?我试过了

var obj = {prop: 'foo', prop: 'bar'};
…但当然,我最终只有一个属性(
对象{prop:“bar”}
),包括严格模式和非严格模式

这取决于实现吗?这本书是2011年版,ECMAScript 5在里面


我应该读一本更新的书吗?

这本书是对的;ES5规范指出,在对象文本中定义具有相同名称的多个属性是语法错误

看看这里:

如果previous不是未定义的,那么如果以下任何条件为真,则引发SyntaxError异常

资料性的:

如果严格模式代码包含一个ObjectLiteral,并且任何数据属性的定义不止一个(11.1.5),则这是一个语法错误

不过,您正在测试的实现也是正确的,因为当前的ECMAScript规范是ES2015,它取消了这一限制!它没有列在its或其他任何地方

如果我不得不猜测的话,这可能是因为删除的原因是与计算属性的一致性,所以这些文字总是等价的:

({ a: 1, ['a']: 2 })
({ a: 1, a: 2 })

但是,是的,每个人都是对的\啊,真奇怪。根据ES5规范,这绝对是一个严格的模式限制:和。我正在检查ES6是否现在取消了它(可能是针对计算属性)。没有错误发生意味着没有语法错误。一个对象不能有多个同名属性。@thangngoc89在两种模式下都不会出现语法错误。知道为什么吗?是的,IIRC,计算属性是原因,尽管在我看来这是一个可怕的原因。谢谢-这里有这么多好的信息,我不知道。幸好我问了。