Javascript 什么时候可以!=被用来代替!==?

Javascript 什么时候可以!=被用来代替!==?,javascript,Javascript,考虑下面的代码片段: 我理解两者之间的区别!=而且!==是第一个按引用进行比较,第二个按值进行比较。既然这里的比较为空,那么为什么开发人员选择使用!==而不是!=?我的理解正确吗?这两种方法都适用于这里。==/=运算符仅比较变量的值,而不是类型 ==/==运算符比较变量的类型和值 一些例子: var varA = 5; // int var varB = '5'; // string var varC = 5; // int if(varA == varB) // true (only val

考虑下面的代码片段:


我理解两者之间的区别!=而且!==是第一个按引用进行比较,第二个按值进行比较。既然这里的比较为空,那么为什么开发人员选择使用!==而不是!=?我的理解正确吗?这两种方法都适用于这里。

==
/
=运算符仅比较变量的值,而不是类型

==
/
==运算符比较变量的类型和值

一些例子:

var varA = 5; // int
var varB = '5'; // string
var varC = 5; // int

if(varA == varB) // true (only value compared)
if(varA === varB) // false: because varB is of type string and varA of type int

if(varA == varC) // true
if(varA === varC) // true: because varA and varC are of the same type and have the same value

我经常使用“if(x!=null)”来检查x是null还是未定义。这比只说“if(x)”更安全,因为除了空值和未定义值之外,还有其他错误值。

为了方便起见,这里有一个概览表:

如您所见,
=
考虑了相等的三个空“值”(0和false)和两个“非值”(
null和未定义)。有关确切的算法,请参见


在大多数情况下,最好避免使用
==
,并始终坚持使用
==

“第一个按引用进行比较,第二个按值进行比较”这句话。它们在比较对象时都会比较引用。区别在于
=在比较原语时执行类型强制<代码>验证用户!==null
表示除严格意义上的
null
以外的任何内容,包括
未定义的
,都会导致
为true
。要深入了解发生了什么,包括对性能差异的评论,请:
var varA = 5; // int
var varB = '5'; // string
var varC = 5; // int

if(varA == varB) // true (only value compared)
if(varA === varB) // false: because varB is of type string and varA of type int

if(varA == varC) // true
if(varA === varC) // true: because varA and varC are of the same type and have the same value
            0   ""  false   null    undefined
0           Y   Y   Y       n       n
""          Y   Y   Y       n       n
false       Y   Y   Y       n       n
null        n   n   n       Y       Y
undefined   n   n   n       Y       Y