访问JavaScript对象字面量

3
也许这是一个愚蠢的问题,但是我希望能够解释一下以下行为:
var obj = {
    key : "val1",
    123 : "val2"
};

obj.key; // "val1"
obj.123; // Syntax error: missing; before statement
obj[123]; // "val2"

为什么obj.keyobj.123不同,尽管它们都被声明为obj的键。


以这种方式访问对象字面量obj.123是错误的。

以下方式声明对象是正确的吗? 我测试过的浏览器有IE9、firefox和chrome,对于所有浏览器都可以正常工作。

var obj = {
    123 : "val1"
};

2
JavaScript标识符必须以字母、下划线(_)或美元符号($)开头;后续字符也可以是数字(0-9)。由于JavaScript区分大小写,因此字母包括字符"A"到"Z"(大写)和字符"a"到"z"(小写)。 - Yoshi
1
你为什么要把一个属性命名为“123”呢... - Didier Ghys
1个回答

5

JavaScript允许您使用几乎任何字符串作为对象属性名,但是当使用点表示法访问属性时,只应使用符合JS有效标识符规则的属性名称 - 必须以字母、下划线或美元符号开头。因此,对于不符合有效标识符规则的属性名称,必须使用方括号表示法访问它们。

尽管方括号表示法可以使用数字,但在幕后,JS会将该数字转换为字符串。


那么你的意思是创建这样一个对象 var obj = {123: "val"} 是正确的吗?我可以确定它在所有浏览器中都能正常工作吗?我只在IE9、Firefox和Chrome中测试过,它们都能正常工作。 - antonjs
1
我不打算承诺某个东西在所有浏览器中都能运行;我的回答中缺乏有关对象字面量规则的信息,因为我不想出错,并且我假设其他人会加入以澄清这一点。我倾向于对这些事情过于谨慎,所以在我的代码中,我会写成 var obj = {"123" : "val"}; - nnnnnn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接