• 24小时服务热线:400-088-1128

当前位置 南顺网络>> 知识拓展

===和==的区别

== 使用细则

下面给出用==运算符比较时,两边操作数xy隐式类型转换的细则:

1.xy类型相同

1.1 若x为undefined类型, 则返回true。

console.log(undefined == undefined); // true

1.2 若x为null类型,则返回true。

console.log(null == null); // true

1.3 若x为number类型,且x和y只要有一者为NaN,则返回false。(NaN并不等于本身)

console.log(NaN == 0); // false
console.log(0 == NaN); // false
console.log(NaN == 1); // false
console.log(1 == NaN); // false
console.log(NaN == NaN); // false

1.4 若x为number类型,且x和y的数值相等,则返回true。若x和y的数值不相等,则返回false。

console.log(0 == 0); // true
console.log(1 == 1); // true
console.log(0 == 1); // false

1.5 若x为number类型,且x和y的值为+0或者-0,则返回true。

console.log(-0 == +0); // true
console.log(+0 == -0); // true
console.log(+0 == +0); // true
console.log(-0 == -0); // true

1.6 若x为string类型,当且仅当x和y字符序列完全相等的,则返回true。否则,返回false。

console.log('foo' == 'foo'); //true
console.log('foo' == 'bar'); // false

1.7 若x为boolean类型,当x和y二者同为true或者false时,则返回true。否则,返回false。

console.log(true == true); // true
console.log(false == false); // true
console.log(true == false); // false
console.log(false == true); // false

1.8 若x为object类型,当且仅当x和y二者是同一引用,则返回true。否则,返回false。

var x = {}, y = {}, z = x;
console.log(x == y); // false
console.log(x == z); // true
console.log(y == z); // false
console.log(x == {}); // false
console.log({} == y); // false
console.log({} == {}); // false

2.xy类型不相同

2.1 若x为null,y为undefined,或者x为undefined,y为null,则返回true。

console.log(null == undefined); // true
console.log(undefined == null); // true

=== 使用细则

接下来,我们看看,使用===的细则,这里同样用x和y代表运算符两边的操作数。

  • 若x和y类型不同,直接返回false。
console.log(undefined === null); // false
console.log(1 === true); // false
console.log(0 === false); // false
console.log(1 === '1'); // false
console.log(0 === '0'); // false
console.log('1' === true); // false
console.log('0' === false); // false
console.log(0 === []); // false
console.log(false === []); // false
console.log('' === []); // false
复制代码
  • 若x和y类型相同,若都为基本类型,对比二者数值是否相等;若为引用类型,对比两者引用地址是否是同一地址。
var a = {}, b = {}, c = a;
console.log(undefined === undefined); // true
console.log(null === null); // true
console.log(0 === 0); // true
console.log(0 === 1); // false
console.log('0' === '0'); // true
console.log('0' === '1'); false
console.log(false === false); // true;
console.log(true === false); // false
console.log({} === {}); // false
console.log(a === b); // false
console.log(a === c); // true;
console.log(b === c); // false
...

我们可以看到,使用===仅有两条细则,完全不涉及到一些隐式数据类型转换,大大提高了代码的可调试性和可预见性,而且易用性远比==好。所以,在日常开发中,我强烈推荐使用===,尽可能少用==。或许我的推荐显得不怎么权威,但是,这个细则已经写入了很多JavaScript代码规范了。