这是在Firebug中完成的:
>>> {a : 1} == {a : 1}
SyntaxError: syntax error
[Break On This Error] {a : 1} == {a : 1}
>>> ({a : 1}) == {a : 1}
false
所以它需要({a : 1}) == {a : 1}
,为什么会这样?
答案 0 :(得分:16)
因为{a : 1}
是一个声明,但==
不允许其遵循
({ a : 1 })
是一个表达式,允许后跟==
这基本上是语法中定义的规则。
但请注意({ a: 1} == { a: 1})
有效。所以等价表达式是有效的。
这意味着{a : 1} == { a : 1 }
根本不是有效的语句。
注意ExpressionStatement不能以开括号大括号开头,因为这可能会使其与Block不一致。此外,ExpressionStatement不能以function关键字开头,因为这可能使其与FunctionDeclaration不一致。
作为旁注,你会发现
({a : 1}) != {a : 1}
因为它们是两个新对象
答案 1 :(得分:13)
解析器将前导“{”字符解释为启动语句块,而不是启动表达式。这是语言中的含糊不清,这就是它的解决方式(根据规范)。
这类似于function
关键字周围的含糊不清。当一个语句以function
开头时,它是一个函数声明语句,即使语法可能作为表达式的开头。解析器必须根据一些规则解决这些含糊不清的问题。
答案 2 :(得分:0)
我认为您可能希望先将两个对象分配给变量,然后比较这两个变量,而不是在语句中创建它们。您的问题依赖于您在声明中分配的事实。通过添加(),您将该赋值作为语句包装,并且它可以正常工作。