为什么 "{} == false" 是不正确的javascript语法,而 "false == {}" 则是正确的?

11

以下是浏览器控制台(火狐和谷歌)中的结果,false == {} 是正确的,但是 {} == false 会给出语法错误。

>> false == []
true
>> false == {}
false
>> 0 == false
true
>> false == []
true
>> false == {}
false
>> [] == false
true
>> {} == false
Uncaught SyntaxError: Unexpected token == 
3个回答

11
在前一种情况下,解析器不清楚{}代表一个值。
以下代码是有效的:
var a = {};
a == false      // false

或者您可以使用以下方法:

({}) == false   // false

所以这不是针对值的比较的特定内容,而是代码被解析的方式。

好问题!


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

{}variableName也不是语法错误,原因相同 - 它是一个空的代码块。

如果你将其用括号包起来,它就会被正确地解析为对象字面量,并且能够正常工作。

({}) == false

0

即使这个可以工作,

 /{}/ == false;   // false 

你在它被关闭为重复问题之后是如何回答的? - Scimonster
我在发布后才发现重复了,很抱歉。 - Dimag Kharab
我的意思是,从技术上讲,它是如何让你做到的? - Scimonster
@Scimonster 闻起来有 BUG! - Dimag Kharab
4
限制发帖的限制只在客户端实施。如果您在页面关闭之前加载了页面,而由于某种原因JavaScript未能加载或无法正常工作,则用户将能够在页面关闭后发布内容。http://meta.stackexchange.com/questions/91922/how-was-this-answer-posted-after-this-question-was-closed - Qantas 94 Heavy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接