2013-06-20 95 views
1

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

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

在运行

show(duck) 

我得到

{feet:2} 

有一些怪异的JavaScript原因这种行为?为什么不抛出错误?

+0

这种出乎意料的方式是什么?你首先告诉他脚是1,然后是2,他只会记住最后一个。 – Saturnix

回答

3

对象中不能有多个相同名称的属性,但语言会让它静静地通过。这是该语言的一个缺陷。 ECMAScript的5严格模式固定的,所以下面将抛出一个错误:

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

这是一个缺陷,还是它只是识别以前设置的属性并覆盖它?就是想。 –

+0

我正在绞尽脑汁思考一个场景,你会故意这样做......我可以想到这个代码生成,也许是为了提供eval。如果代码存在这样做的目的,它可能会工作,但它本身就太聪明了(后来的开发人员太难以读取应用程序的意图) – MatthewMartin

+0

@SurrealDreams它是两个。这个缺陷并没有引发错误(因为对象文本中的重复键没有意义)。 – bfavaretto

0

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

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

@Blender:我猜show是他的图书馆之间的方法,通过每个属性步骤和其所对应的值打印出来。

0

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

"use strict";