首先要记住JS中一共有6种false值:
0、NaN、“”、false、null、undefined
隐式类型转换的规则
1.字符串和数字做相等比较
2.布尔值和字符串比较
3.当布尔值和数字之间比较
以上三种情况都往数字类型转
10 == "10" //true
true == 1 //true
true == "1" //true
true == "true" //false ("true"转为数字是NaN)
4.在==中,null和undefined是相等的(不会进行类型转换)
let a = null;
let b;
console.log(a == b); //true
5.对象数据类型VS基础数据类型
对象首先要获取自身的valueOf,再toString
[] == ![] //true
{} == !{} //true
[ ] == ![ ] => [ ] == false => " " == false => 0 == 0 √
6.对象数据类型VS对象数据类型
[] == [] //false
{} == {} //false
[] === [] //false
{} === {} //false
[] !== [] //true
{} !== {} //true
比较地址值
写[ ]实际上是 new Array([ ])的语法糖,是一种简化写法
完整判断格式 new Array([ ]) == new Array([ ])
并且,即使是二连等也是比较地址值,不会做类型转换,所以为×