JS:两个或多个非严格模式下具有相同名称的对象属性
JS: two or more object properties with the same name in non-strict mode?
阅读David Flanagan的最终指南(第6版)时,偶然发现了这一点:
在严格模式下,定义对象文字是一个语法错误具有相同名称的两个或多个属性。(在非严格模式下,没有错误发生。)
我找不到任何例子——这可能吗?我试过
var obj = {prop: 'foo', prop: 'bar'};
但当然,我最终只得到了一个性质(Object {prop: "bar"}
),无论是严格模式还是非严格模式。
此实现是否依赖于此?这本书是2011年的版本,ECMAScript 5就在里面。
我应该读一本新书吗?
这本书是对的;ES5规范指出,在对象文字中定义具有相同名称的多个属性是语法错误。
参见第11.1.5节:
如果先前未定义,则如果以下任何条件为真,则抛出SyntaxError异常
以及资料性附录C:
如果严格模式代码包含具有任何数据属性(11.1.5)的多个定义的ObjectLiteral,则为SyntaxError
然而,您正在测试的实现也是正确的,因为当前的ECMAScript规范是ES2015,它取消了这个限制!它没有列在附件C或其他任何地方。
如果非要我猜测的话,删除的原因是与计算属性的一致性,所以这些文字总是等价的:
({ a: 1, ['a']: 2 })
({ a: 1, a: 2 })
但是是的,每个人都是对的。''o/
相关文章:
- 为什么我可以在Array属性对象中找到Javascript Array for Each方法
- 使用onclick调用属性对象函数
- 嵌套为..in 循环,列出多维对象的属性(对象)
- 动态属性对象 - JSON
- 在不使用隔离范围angularjs自定义指令的情况下获取属性对象
- 通过属性传递属性/对象.Javascript
- Javascript:属性/对象的类型
- 访问JSON中的属性(对象)
- 属性对象Javascript不是用Jquery Deferred设置的
- 无法读取属性'#<对象>'未定义的获取错误
- Twitter中多属性对象的子字符串匹配
- 无法设置'data'属性'对象'标记.(只IE8)
- 更新数据属性对象属性值
- 将属性对象的选定对象从原型推入数组
- 将单个属性对象字面量的数组转换为仅包含其值的数组的最佳方法
- 寻找一种更简单的方法来检查是否多个属性&对象中的方法是未定义的
- 主干模型:带有get方法的空属性,但在属性对象中
- 如何赋值给"text"someText"属性对象在动能js
- Angularjs的数据绑定与数据属性对象
- 如何将一个嵌套的javascript对象转换为只有一级属性对象