多次设置Javascript属性

多次设置Javascript属性,javascript,properties,Javascript,Properties,我目前正在学习javascript,在多次设置属性时遇到了这种相当奇怪的行为。例如: var duck = {feet: 1, feet: 2} 跑步时 show(duck) 我明白了 {feet:2} 这种行为有什么奇怪的javascript原因吗?为什么没有抛出错误?一个对象中不能有多个同名属性,但该语言允许它以静默方式传递。这是语言上的一个缺陷。ECMAScript 5 strict mode修复了该问题,因此以下内容将引发错误: "use strict"; var duck = {

我目前正在学习javascript,在多次设置属性时遇到了这种相当奇怪的行为。例如:

var duck = {feet: 1, feet: 2}
跑步时

show(duck)
我明白了

{feet:2}

这种行为有什么奇怪的javascript原因吗?为什么没有抛出错误?

一个对象中不能有多个同名属性,但该语言允许它以静默方式传递。这是语言上的一个缺陷。ECMAScript 5 strict mode修复了该问题,因此以下内容将引发错误:

"use strict";
var duck = {feet: 1, feet: 2}
// SyntaxError: Duplicate data property in object literal not allowed in strict mode 

我有点同意在这里抛出一个错误是有道理的。我认为解析器只是将对象声明扩展为一系列语句,因此没有任何部分实际上是无效的

duck.feet = 1;
duck.feet = 2;

@Blender:我猜在他的库中,
show
是一种方法,它逐步遍历每个属性并将其与相关值一起打印出来。

非严格JavaScript允许对象包含多个同名属性。多次使用同一名称时,只使用最后一个声明。严格模式要求所有属性名称都是唯一的

"use strict";

这在哪方面出乎意料?你先告诉他脚是1,然后是2。他只会记住最后一个。这是一个缺陷,还是只是识别了以前设置的属性并覆盖了它?只是想知道。我绞尽脑汁想一个你会故意这么做的场景。。。我所能想到的就是这一代代码,也许是为了给eval提供信息。如果存在故意这样做的代码,它可能会工作,但它太聪明了(后续开发人员很难读懂应用程序的意图)@superalStreams两者兼而有之。该缺陷不是抛出错误(因为对象文本中的重复键没有意义)。