为什么“{} == false”错误的javascript语法,而“false == {}”不是?

时间:2014-11-11 09:46:01

标签: javascript

以下是浏览器控制台(firefox和chrome)的结果, false == {}有效,但{} == false会出现语法错误。

>> false == []
true
>> false == {}
false
>> 0 == false
true
>> false == []
true
>> false == {}
false
>> [] == false
true
>> {} == false
Uncaught SyntaxError: Unexpected token == 

3 个答案:

答案 0 :(得分:11)

在前一种情况下,解析器并不清楚{}代表一个值。

以下作品:

var a = {};
a == false      // false

或者您也可以使用:

({}) == false   // false

所以这不是价值比较的特定内容 - 相反,它是解析代码的方式。

好问题!

答案 1 :(得分:3)

如果你只运行{},你会发现它根本没有被解析为对象 - 它给出了undefined!显然,它被解析为代码块。因此,{} == false是语法错误,因为==的左侧没有任何内容。

出于同样的原因,

{}variableName也不是语法错误 - 它是一个空代码块。

如果将它包装在括号中,它会被正确地解析为对象文字,并且可以正常工作。

({}) == false

答案 2 :(得分:0)

即便如此,

 /{}/ == false;   // false