代码之家  ›  专栏  ›  技术社区  ›  nonopolarity

在Javascript控制台中键入{a:1}表示1,{a:1,b:2}表示错误的行为是什么?

  •  15
  • nonopolarity  · 技术社区  · 14 年前

    以下内容将在Firebug或 jsconsole.com 或在其他Javascript交互控制台中:

    >>> foo = { a : 1, b : 2.2 }
    Object { a=1, more...}
    
    >>> foo.a
    1
    
    >>> foo.b
    2.2
    
    >>> { a : 1, b : 2.2 }
    SyntaxError: invalid label { message="invalid label", more...}
    
    >>> { a : 1 }
    1
    

    为什么 1 {a : 1} 为什么呢 {a : 1, b : 2.2} 给出一个错误?在Ruby中,它们的返回方式与您定义的相同。

    3 回复  |  直到 14 年前
        1
  •  25
  •   Community Ian Goodfellow    7 年前

    第二行是给你一个 SyntaxError 因为 { 标记的开头会导致歧义,解析器将其视为 Block statement ,而不是对象文本的开头。

    例如,有效的Block语句:

    { foo: 'bar' }
    

    以上 语句上下文

    labelled statement ( foo ),后跟表达式语句( 'bar' ).

    为了确保使用的是对象文字的语法,可以用括号(也称为 the grouping operator ):

    ({ foo: 'bar' })
    

    分组运算符只能接受表达式,因此没有歧义。

    另请参见:

        2
  •  0
  •   Marcus Stade Quentin    14 年前

    我不是百分之百肯定,但我认为在第二行你定义的是一个块,而不是一个对象。因此,当解析器到达逗号时,解析错误就出现了,因为它需要半彩色。定义的标签是标签,如goto或switch语句中的标签。我希望这个解释有道理。

        3
  •  -1
  •   sjngm quinti    13 年前

    eval({....}) --- this will get an error
    eval('({....})')---eval string as a function