我目前正在学习javascript,并且在设置属性多次时遇到了这种相当奇怪的行为。例如:设置Javascript属性多次
var duck = {feet: 1, feet: 2}
在运行
show(duck)
我得到
{feet:2}
有一些怪异的JavaScript原因这种行为?为什么不抛出错误?
我目前正在学习javascript,并且在设置属性多次时遇到了这种相当奇怪的行为。例如:设置Javascript属性多次
var duck = {feet: 1, feet: 2}
在运行
show(duck)
我得到
{feet:2}
有一些怪异的JavaScript原因这种行为?为什么不抛出错误?
对象中不能有多个相同名称的属性,但语言会让它静静地通过。这是该语言的一个缺陷。 ECMAScript的5严格模式固定的,所以下面将抛出一个错误:
"use strict";
var duck = {feet: 1, feet: 2}
// SyntaxError: Duplicate data property in object literal not allowed in strict mode
这是一个缺陷,还是它只是识别以前设置的属性并覆盖它?就是想。 –
我正在绞尽脑汁思考一个场景,你会故意这样做......我可以想到这个代码生成,也许是为了提供eval。如果代码存在这样做的目的,它可能会工作,但它本身就太聪明了(后来的开发人员太难以读取应用程序的意图) – MatthewMartin
@SurrealDreams它是两个。这个缺陷并没有引发错误(因为对象文本中的重复键没有意义)。 – bfavaretto
我有点同意这将使意义在这里抛出一个错误。我认为解析器只是将对象声明扩展为一系列语句,因此它的任何部分实际上都是无效的。
duck.feet = 1;
duck.feet = 2;
@Blender:我猜show
是他的图书馆之间的方法,通过每个属性步骤和其所对应的值打印出来。
非严格JavaScript允许对象包含具有相同名称的多个属性。多次使用同一名称时,只使用最后一个声明。严格模式要求所有属性名称都是唯一的。
"use strict";
这种出乎意料的方式是什么?你首先告诉他脚是1,然后是2,他只会记住最后一个。 – Saturnix