为什么我不使用JS的==运算符

相等运算符

相等运算符(==),比较不同类型的数据时,相等运算符会先将数据进行类型转换,然后再用严格相等运算符比较。

相等运算符.png

相等运算符的缺点

'' == '0'           // false
0 == ''             // true
0 == '0'            // true

2 == true           // false
2 == false          // false

false == 'false'    // false
false == '0'        // true

false == undefined  // false
false == null       // false
null == undefined   // true

' \t\r\n ' == 0     // true

相等运算符返回true的太多,反正我是记不住,我也不想再记这些乱七八糟的东西,所以我不使用相等运算符,因此要使用严格相等运算符。

严格相等运算符

严格相等运算符(===)比较它们是否为“同一个值”。如果两个值不是同一类型,严格相等运算符(===)直接返回false。

严格相等运算符.png

不同类型的值

如果两个值的类型不同,直接返回false。

1 === "1" // false
true === "true" // false

同一类的原始类型值

同一类型的原始类型的值(数值、字符串、布尔值)比较时,值相同就返回true,值不同就返回false。

1 === 0x1 // true

需要注意的是,NaN与任何值都不相等(包括自身)。另外,正0等于负0。

NaN === NaN  // false
+0 === -0 // true

同一类的复合类型值

两个复合类型(对象、数组、函数)的数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个对象。

{} === {} // false
[] === [] // false
(function (){} === function (){}) // false

如果两个变量引用同一个对象,则它们相等。

var v1 = {};
var v2 = v1;
v1 === v2    // true

undefined 和 null

undefined和null与自身严格相等。

undefined === undefined // true
null === null // true

由于变量声明后默认值是undefined,因此两个只声明未赋值的变量是相等的。

var v1;
var v2;
v1 === v2 // true

严格不相等运算符

严格相等运算符有一个对应的“严格不相等运算符”(!==),两者的运算结果正好相反。

1 !== '1' // true

同样的,我也不使用不相等运算符,使用严格不相等运算符。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容