为什么我会通过索引获取语法错误调用对象项?

时间:2014-02-12 11:54:11

标签: javascript arrays object indexing

为什么我这样做:

var obj = { 0:"bla", 1:"blabla" }

obj.0给了我一个错误,我只能做obj[0]

4 个答案:

答案 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]);