访问JavaScript对象文字

访问JavaScript对象文字,javascript,Javascript,也许这只是个愚蠢的问题,但是, 如能对以下行为做出解释,我将不胜感激: var obj = { key : "val1", 123 : "val2" }; obj.key; // "val1" obj.123; // Syntax error: missing; before statement obj[123]; // "val2" 为什么obj.key不同于obj.123 尽管它们都被声明为obj的键 以这种方式访问对象文本是错误的 用下面的方法声明对象是正确的吗? 我

也许这只是个愚蠢的问题,但是, 如能对以下行为做出解释,我将不胜感激:

var obj = {
    key : "val1",
    123 : "val2"
};

obj.key; // "val1"
obj.123; // Syntax error: missing; before statement
obj[123]; // "val2"
为什么
obj.key
不同于
obj.123
尽管它们都被声明为
obj
的键


以这种方式访问对象文本是错误的

用下面的方法声明对象是正确的吗? 我测试过的浏览器有IE9、firefox和chrome,它们都可以正常工作

var obj = {
    123 : "val1"
};

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


尽管括号表示法适用于数字,但幕后JS会将该数字转换为字符串。

ref:/JavaScript标识符必须以字母、下划线(u)或美元符号($)开头;后续字符也可以是数字(0-9)。因为JavaScript是区分大小写的,字母包括字符“A”到“Z”(大写)和字符“A”到“Z”(小写)。你为什么要调用属性“123”…那么你的意思是这样做是正确的?我能确保它在所有浏览器中都能正常工作吗?我只是在IE9、Firefox和Chorme中测试了它,效果很好;我的回答中明显没有关于对象文字规则的信息,因为我不想弄错,我想其他人会插话澄清这一点。我对这类事情比较谨慎,所以在我的代码中我会说
var obj={“123”:“val”}