如果我打开我的浏览器控制台(在 Chrome/Firefox 中测试)并输入:
null == {}
我得到:
false
但是,如果我将两个参数都传递给 ==
运算符并改为键入:
{} == null
我得到:
Uncaught SyntaxError: Unexpected token ==
图片:
- 为什么会这样?
- 为什么这只发生在控制台中,而不是当浏览器在 HTML 页面中执行脚本时?
编辑:
同时 question 35812626解决此问题并解释原因,因为 JS 将 {}
解析为代码块,它使用三等号(严格比较)运算符 ===
,而不是双重等号 ==
。正如用户在下面指出的那样,代码块后面肯定可以跟 ==
而不会导致语法错误:
{} == {} // false
为什么这行得通而我的示例却行不通?
最佳答案
我认为这是因为解释器将 {}
解释为代码块而不是对象。
所以你的代码 {} == null
结果是一个 block 开始和结束,然后一个语句以 ==
开始,这绝对是一个语法错误。
但如果你可以尝试 ({} == null)
我认为它应该运行良好。
正如@dhaker {}=={}
所指出的,返回 false
不是错误。
而且我发现很少有场景返回结果,也很少有出错。
以下出现错误:
{}==null //Uncaught SyntaxError: Unexpected token ==
{}==1 //Uncaught SyntaxError: Unexpected token ==
{}==0 //Uncaught SyntaxError: Unexpected token ==
{}==true //Uncaught SyntaxError: Unexpected token ==
{}==false //Uncaught SyntaxError: Unexpected token ==
{}==true //Uncaught SyntaxError: Unexpected token ==
{}=='' //Uncaught SyntaxError: Unexpected token ==
{}=='hi' //Uncaught SyntaxError: Unexpected token ==
{}==(new Object) //Uncaught SyntaxError: Unexpected token ==
以下是无错误返回结果:
{}=={} //false
{}==function(){} //false
所以我想这与浏览器编译或解释 Javascript 的方式有关。
要获得更详细的答案,请查看以下答案。
关于javascript - 为什么在控制台中交换 == 的参数会改变输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50986812/