为什么我这样做:
var obj = { 0:"bla", 1:"blabla" }
obj.0
给了我一个错误,我只能做obj[0]
?
答案 0 :(得分:2)
正确的identifier不得以数字开头。就这么简单。如果属性的键是正确的标识符,则只能使用.
(点)表示法访问属性。否则,必须使用方形括号表示法:obj['0']
obj[0]
与obj['0']
相同,因为属性键必须是字符串(任何字符串都是有效的属性键),因此括号中的值被强制转换为字符串。
答案 1 :(得分:0)
var obj = { 0:"bla, 1:"blabla" } //wrong
bla不是正确的双重qoutes,所以试试
var obj = { 0:"bla", 1:"blabla" } //correct
答案 2 :(得分:0)
您的代码似乎有一个SyntaxError
,因为"
之后缺少bla
:
var obj = { 0:"bla", 1:"blabla" }
无论如何,obj.0
会给你一个SyntaxError
,因为JavaScript通过以下语法识别属性访问:
<identifier>.<identifier>
JavaScript中的标识符不能以数字开头。这就是你做不到的原因:
var 1a = 1; // SyntaxError -> Unexpected number
通过执行obj[0]
,JavaScript将0
识别为表达式并转换为字符串"0"
,尊重JavaScript对象是关联数组的规则,然后可以通过他们的键(字符串)是这样的:
obj["constructor"]
您可以在ECMAScript语言规范的section 7.6中阅读更多相关信息。
以下代码描述了标识符语法(取自上面的链接):
IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart
IdentifierStart ::
UnicodeLetter
$
_
\ UnicodeEscapeSequence
答案 3 :(得分:0)
试试这个:
<强>声明强>
var obj = { "0":"bla", "1":"blabla" };
使用强>
alert(obj[0]);
alert(obj[1]);