为什么在控制台中通过==的参数来改变输出?

Pau*_*enn 7 javascript equals-operator browser-console

如果我打开浏览器控制台(在Chrome/Firefox中测试)并输入:

null == {}
Run Code Online (Sandbox Code Playgroud)

我明白了:

但是,如果我将两个参数都传递给==运算符,而是键入:

{} == null
Run Code Online (Sandbox Code Playgroud)

我明白了:

未捕获的SyntaxError:意外的令牌==

图片:

在此输入图像描述

  • 为什么会这样?
  • 为什么这只发生在控制台中,而不是在浏览器在HTML页面中执行脚本时?

编辑:

问题35812626个地址本,并解释为JS解析原因{}作为代码块,它使用三重等于(严格比较)运算符===,而不是双等于==.正如用户在下面指出的那样,绝对可以遵循代码块==而不会导致语法错误:

{} == {} // false
Run Code Online (Sandbox Code Playgroud)

怎么会这样,我的例子没有?

Inu*_*aha 4

我认为这是因为解释器解释{}为代码块而不是对象。

所以你的代码结果{} == null是一个块开始和结束,然后一个语句开始==,这绝对是一个语法错误。

但如果你能尝试的话,({} == 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 ==
Run Code Online (Sandbox Code Playgroud)

以下是没有错误的返回结果:

{}=={} //false
{}==function(){} //false
Run Code Online (Sandbox Code Playgroud)

所以我想这与浏览器如何编译或解释 Javascript 有关。

如需更详细的答案,请查看以下答案。

对象文字比较的奇怪行为