问题 为什么“{} == false”错误的javascript语法,而“false == {}”不是? [重复]


这个问题在这里已有答案:


2481
2017-11-11 09:46


起源



答案:


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

以下作品:

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

或者您也可以使用:

({}) == false   // false

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

好问题!


11
2017-11-11 09:48





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

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

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

({}) == false

3
2017-11-11 09:51





即便这样,

 /{}/ == false;   // false 

0
2017-11-11 09:53



你是怎么回答它被关闭后重复的? - Scimonster
我没看到,仅在发布后,我看到它是重复的。抱歉 - Dimag Kharab
我的意思是,从技术上讲,它是如何让你的? - Scimonster
@Scimonster闻起来BUGGY! - Dimag Kharab
@Scimonster:仅在客户端上强制执行阻止发布的限制。如果您在页面关闭之前加载页面,并且由于某种原因JavaScript未加载或无法正常工作,则用户可以在关闭后发布。 meta.stackexchange.com/questions/91922/... - Qantas 94 Heavy


答案:


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

以下作品:

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

或者您也可以使用:

({}) == false   // false

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

好问题!


11
2017-11-11 09:48





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

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

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

({}) == false

3
2017-11-11 09:51





即便这样,

 /{}/ == false;   // false 

0
2017-11-11 09:53



你是怎么回答它被关闭后重复的? - Scimonster
我没看到,仅在发布后,我看到它是重复的。抱歉 - Dimag Kharab
我的意思是,从技术上讲,它是如何让你的? - Scimonster
@Scimonster闻起来BUGGY! - Dimag Kharab
@Scimonster:仅在客户端上强制执行阻止发布的限制。如果您在页面关闭之前加载页面,并且由于某种原因JavaScript未加载或无法正常工作,则用户可以在关闭后发布。 meta.stackexchange.com/questions/91922/... - Qantas 94 Heavy