欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

你真的了解“==”吗?

程序员文章站 2022-03-16 08:56:13
...

下面两个代码段的输出是?

var a = [0];
if ([0]) {
  console.log(a == true);
} else {
  console.log("wut");
}
[]==[]

答案:false, false

解析:如果单纯的把[0]转换成boolean类型的话,结果会是true,所以if判断语句的结果是true。 

看了很多其他的博客,都有说到“==”会做类型转换,比较其值,我觉得这个答案依然无法详细解释上述代码的结果。

查阅了更多资料后,找到了一些“==“的规则:

1、如果两个值类型相同,进行 === 比较,比较规则同上 
2、如果两个值类型不同,他们可能相等。根据下面规则进行类型转换再比较: 
a、如果一个是null、一个是undefined,那么[相等]。 
b、如果一个是字符串,一个是数值,把字符串转换成数值再进行比较。 
c、如果任一值是 true,把它转换成 1 再比较;如果任一值是 false,把它转换成 0 再比较。 
d、如果一个是对象,另一个是数值或字符串,把对象转换成基础类型的值再比较。对象转换成基础类型,利用它的toString或者valueOf方法。js核心内置类,会尝试valueOf先于toString;例外的是Date,Date利用的是toString转换。非js核心的对象,(比较麻烦,我也不大懂) 
e、任何其他组合(array数组等),都不相等。

所以其实”==“的转换规则,并没有想象的那么简单,由此可见[0] == true, 应该采用的是规则c, 而[] == [] 应该采用的是规则e.