我期待JavaScript拒绝具有重复属性的对象作为无效,但在某些情况下它会接受它们。为什么在JavaScript中接受具有重复属性的对象?
{"a":4,"a":5}
至少在Firefox和Chrome中导致一个SyntaxError
,由于属性a
被定义了两次,这似乎是显而易见的。
但({"a":4,"a":5})
的评估结果很好,并在Firefox和Chrome中导致对象{"a":5}
。
为什么用括号表达接受?
总结回复:第一个例子根本不是一个对象的构造,而是一组标记语句。在最后一个定义获胜的情况下,对象中的重复属性完全有效。
非常感谢您的回答!
似乎在FF和Chrome http://jsbin.com/iponud/1/edit上有和没有括号一起正常工作。我的意思是它返回最后一个'a' – elclanrs
@elclanrs:这个结果是有误导性的(我在jsfiddle早些时候自己就这么做了:) - 将代码放在'console.log'参数列表中去掉[句法含糊不清,导致在第一个地方的错误](http://stackoverflow.com/a/13287483/1081234) –