【问题标题】:Why do I get syntax error calling object item by index?为什么按索引调用对象项时出现语法错误?
【发布时间】:2014-03-10 17:41:51
【问题描述】:

为什么会这样:

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

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

【问题讨论】:

  • 不是数组更方便var arr = ["bla", "blabla"] arr[0] // bla
  • 您在此处缺少双引号。应该是var obj = { 0:"bla", 1:"blabla" }
  • 缺少的报价只在这里,当我用报价运行时我仍然出错
  • @Endless 确实如此,但这个问题更理论化,以了解 JS 的工作方式。

标签: javascript arrays object indexing


【解决方案1】:
 var obj = { 0:"bla, 1:"blabla" } //wrong

bla 没有正确使用双引号,所以试试

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

【讨论】:

    【解决方案2】:

    您的代码似乎有一个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
    

    【讨论】:

    • 是的,但你仍然可以使用数字... obj[1]
    • 是的,但在这种情况下,1 是一个包含在[] 中的表达式。
    【解决方案3】:

    正确的identifier 不能以数字开头。就这么简单。如果属性的键是正确的标识符,则只能使用 .(点)表示法访问属性。否则必须使用方括号表示法:obj['0']

    obj[0]obj['0'] 相同,因为属性键必须是字符串(任何字符串都是有效的属性键),因此括号之间的值被强制转换为字符串。

    【讨论】:

      【解决方案4】:

      试试这个:

      声明

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

      访问

      alert(obj[0]);
      alert(obj[1]);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-06
        • 2016-06-10
        • 1970-01-01
        • 2019-03-09
        • 2015-10-13
        • 2019-09-28
        • 1970-01-01
        • 2019-09-12
        相关资源
        最近更新 更多