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