【发布时间】:2015-08-17 11:43:37
【问题描述】:
我正在阅读MDN javascript reference,因此以下代码不再返回false:
function haveES6DuplicatePropertySemantics(){
"use strict";
try {
({ prop: 1, prop: 2 });
// No error thrown, duplicate property names allowed in strict mode
return true;
} catch (e) {
// Error thrown, duplicates prohibited in strict mode
return false;
}
}
在 ECMAScript 5 严格模式代码中,重复的属性名称是 被认为是语法错误。随着计算属性的引入 在运行时可以复制的名称,ECMAScript 6 已删除 这个限制。
我的问题是,在初始化程序中允许重复的属性名称有什么实际好处?我可以看到,当动态分配对象属性时,有时可能会发生这种情况,但是由于优先顺序显然决定了在新创建的对象上实际设置了哪些属性——这似乎比最好避免的不确定行为更重要。
【问题讨论】:
-
在铬 v40
Uncaught SyntaxError: Duplicate data property in object literal not allowed in strict mode上为我抛出错误,但未被try..catch捕获 -
它在 chromium v42 / firefox 37 上为我返回
true,它可能需要“实验性 JavaScript 功能”标志才能在 v40 上获得等效行为? -
您想在 ES6(实验性)还是在 ES5 中执行脚本? Chromium v42 和 firefox 37 现在是否在 ES6 模式下运行标准?
-
是的,我相信是后者。 kangax.github.io/compat-table/es6
-
好的。我会假设在 ES6 中,只有在计算属性名称时才会取消重复限制,即在
[..]中。对我来说似乎是一个倒退,或者他们弄错了。看看自己会给出什么样的答案会很有趣。
标签: javascript standards ecmascript-6