此时的情况满足上转换规则的第三步,在双等号左右两边的类型相等时,采用三等号进行判定
此时的==号两边的地址是不一样的,所以返回为false
有了上面两个经验,不难看出, !{}为布尔类,将转换为0, 因为右边为转换成数值类,所以左边Number({}) =>NaN, NaN连自己都不相等,所以为false
以上三种规则都不满足,在javascript规范中找到了答案
Null类型,代表“空值”,代表一个空对象指针,使用typeof运算得到 “object”,所以你可以认为它是一个特殊的对象值。
undefined: Undefined类型,当一个声明了一个变量未初始化时,得到的就是undefined
实际上,undefined值是派生自null值的,ECMAScript标准规定对二者进行相等性测试要返回true,
1. [] == false//true这里是因为==符号会把两边的类型转换成一样的。这里会转成number
[] == 0 // 把false转为number
"" == 0 // 用array的valueOf/toString获取基本类型
0 == 0 // 空字符串转成数字之后是0,Number('')
2.![] == false//true
javascript中所有对象都是true。
!true == false // []也是object,所以是true
false == false // true取反是false