我目前正在学习javascript,并且在多次设置属性时遇到了这种相当奇怪的行为。例如:
var duck = {feet: 1, feet: 2}
正在运行
show(duck)
我得到了
{feet:2}
这种行为有一些奇怪的javascript原因吗?为什么没有抛出错误?
答案 0 :(得分:3)
对象中不能有多个同名属性,但该语言允许它以静默方式传递。这是该语言的一个缺陷。 ECMAScript 5严格模式修复了,所以下面会抛出一个错误:
"use strict";
var duck = {feet: 1, feet: 2}
// SyntaxError: Duplicate data property in object literal not allowed in strict mode
答案 1 :(得分:0)
我有点同意在这里抛出错误是有意义的。我认为解析器只是将对象声明扩展为一系列语句,因此其中没有一部分实际上是无效的。
duck.feet = 1;
duck.feet = 2;
@Blender:我猜测show
是他的库中的一种方法,它遍历每个属性并以其相关值打印出来。
答案 2 :(得分:0)
非严格JavaScript允许对象包含具有相同名称的多个属性。当多次使用相同的名称时,仅使用最后一个声明。严格模式要求所有属性名称都是唯一的。
"use strict";