js 中的==判断规则 4 大规则:
1. undefined==null,这俩货和其他类型比较时都是 false,但是和对方比较就是 true
这一条死记硬背住就行,没有为啥,js 就是这么规定的。
2. 基本类型比较,两边都会先转化为 Number 类型后比较
各基础类型转 Number:
// Boolean
Number(true) = 1
Number(false) = 0
// String
Number('') = 0
Number(' ') = 0
Number('abc') = NaN
Number('abc123') = NaN
Number('0') = 0
Number('123') = 123
注意NaN不等于任何值,包括自己。
3. 引用类型比较,比较指针地址
这个比较好理解
4. 基本类型和引用类型比较,把引用类型转为基础类型再用第 2 条规则比较
引用类型会调用valueOf()方法,如果不是String类型再调用toString()方法,最终转成String类型后用第二条比较
if、while之类的如何判断true or false
其实就是通过Boolean强转的,Boolean可以强制转换任意值为 Boolean 类型,除了以下六个值,其他都是自动转为 true:
undefinednull-0+0NaN''