javascript - 为什么在控制台中交换 == 的参数会改变输出?

标签 javascript equals-operator browser-console

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

null == {}

我得到:

false

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

{} == null

我得到:

Uncaught SyntaxError: Unexpected token ==

图片:

enter image description here

  • 为什么会这样?
  • 为什么这只发生在控制台中,而不是当浏览器在 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 的方式有关。

要获得更详细的答案,请查看以下答案。

Odd behaviour of comparison of object literals

关于javascript - 为什么在控制台中交换 == 的参数会改变输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50986812/

相关文章:

javascript - 理解JS的Object.create函数

javascript - 在某些网站上使用 jQuery 函数会导致 Uncaught TypeError

javascript - 使用支持 Javascript 的 WCF 进行错误处理?

c# - 运算符 == 不能应用于 C# 中的泛型类型吗?

c# - 定义运算符 == 但不定义 Equals() 或 GetHashCode() 有什么问题?

javascript - 在浏览器控制台中导入或需要任何库

javascript - 对 Paypal 的 HTTP 请求

javascript - 自动转到在 React Virtual Dom 中创建的 div 元素

javascript - jQuery 无法处理 AJAX 加载的内容来显示/隐藏 div 内容

python - Python中的 "(1,) == 1,"是什么意思?