- 转换表

转换顺序
- 类型相同,直接比较
- 一边为 NaN, 直接返回 false, (eg. NaN == NaN; // false)
- 两边都是 null / undefined, 直接返回 true (eg. null == undefined; // true)
- 一边是基本类型 (eg. string, number, boolean), 转number 比较
- 一边为引用类型 ( object, array, function), 转基本类型 (boolean, number, string, null, undefined), 再比较
- [] == ![]; // true
- [] == !true; // ! 优先级最高,第一步执行将 ! 右侧转为 boolean
- [] == false;
- [] == 0; // 符合顺序4,boolean 转 number
- 0 == 0; // 符合顺序4,array 转 number
- return true
- {} == !{}; // false
- {} == !true; // ! 优先级最高,第一步执行将 ! 右侧转为 boolean
- {} == false;
- {} == 0; // 符合顺序4,boolean 转 number
- NaN == 0; // 符合顺序4,object 转 number
- return false;
- ''== ![]; // true
- '' == !true;
- '' == false;
- '' == 0;
- 0 == 0;
- return true;
- '' == []; // true
- 0 == 0;
- return true;
- '' == !{}; // true
- '' == !true;
- '' == false;
- 0 == 0;
- return true;
- '' == {}; // false
- 0 == NaN; // false