1

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

var duck = {feet: 1, feet: 2}

正在运行

show(duck)

我明白了

{feet:2}

这种行为是否有一些奇怪的javascript原因?为什么没有抛出错误?

4

3 回答 3

3

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

"use strict";
var duck = {feet: 1, feet: 2}
// SyntaxError: Duplicate data property in object literal not allowed in strict mode 
于 2013-06-20T15:11:20.607 回答
0

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

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

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

于 2013-06-20T15:12:54.863 回答
0

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

"use strict";
于 2013-06-20T15:13:51.273 回答