在JavaScript中,'!='和'!=='是相同的吗?

78

9
请参见https://dev59.com/Z3RC5IYBdhLWcg3wROpQ - Pool
8
他需要知道它们被称为"JavaScript比较运算符",这是问题没有暗示他已经知道的(为了公平起见,原帖作者)。 - Amadiere
4
尝试在谷歌中输入 !== 并查看结果。甚至可以尝试输入 javascript !== - 这样谷歌就不会帮忙了。 - Mottie
2
另一个与!=有关的重复问题:https://dev59.com/bXI-5IYBdhLWcg3wYXL8 - Crescent Fresh
1
@fudgey:你可以在谷歌上搜索很多东西...也许他没找到...SLott的评论是不准确的。 - user195488
显示剩余3条评论
5个回答

130

它们的含义微妙地不同。

!= 检查值
!== 检查值和类型

'1' != 1   // false (these two are the same)
'1' !== 1 // true (these two are **not** the same).
在先前的例子中,表达式的前半部分是一个字符串,后半部分是一个整数。

15

来自 JavaScript 语法,运算符,

!== 表示不完全相同

!= 表示不相等

AND "相同意味着相等并且类型相同。"

来自 5.4. 相等运算符:

"在 JavaScript 中,数字、字符串和布尔值根据它们的值进行比较。... 另一方面,对象、数组和函数则根据引用进行比较。"

--

所以总结一下,它们是否相同?不是,因为除了等同性之外,还有一个额外的测试 !==(而不是 !=)来测试类型的相同性以及等同性。


10
不,它们不一样。例如,请参见这里
4 !== '4' returns true   (and 4 === '4' returns false)
4 != '4'  returns false  (and 4 == '4'  returns true)

2
要了解完整的信息,最好查看规范。您可以从这里下载最新版本:http://www.ecma-international.org/publications/files/drafts/。它是以“tc39-”开头的PDF文件(截至本文撰写时,为tc39-2009-050.pdf)。虽然标注为草案,但它已在本月早些时候通过了投票。 - T.J. Crowder
2
请参考https://dev59.com/Z3RC5IYBdhLWcg3wROpQ#1813267,了解如何阅读规范! - nalply
呵呵,需要一本手册才能读懂规格说明书,这实际上反映了规格说明书的质量问题 :) - Fortega

8

最大的区别在于 != 执行类型转换。也就是说,在检查相等性之前,一个值实际上被强制转换为另一个值。这就是为什么像Amadiere的答案中所述的那样:

'1' != 1

当==和!=用于比较时,它们会执行强制转换并导致不准确的结果。同样,==和===也是如此。一般情况下,除非你需要执行强制转换,否则应避免使用==和!=。使用===和!==来确切地检查你想要的结果。


-1

它不仅检查值,还检查所比较的事物的类型。

这在PHP和其他一些语言中也是相同的。


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