<js> [] == ![]; // true

282 阅读1分钟
  •  转换表

  • 转换顺序

  1. 类型相同,直接比较
  2. 一边为 NaN, 直接返回 false, (eg. NaN == NaN; // false)
  3. 两边都是 null / undefined, 直接返回 true (eg. null == undefined; // true)
  4. 一边是基本类型 (eg. string, number, boolean), 转number 比较
  5. 一边为引用类型 ( object, array, function), 转基本类型 (boolean, number, string, null, undefined), 再比较


  •  [] == ![]; // true 
  1.   [] == !true; // ! 优先级最高,第一步执行将 ! 右侧转为 boolean
  2.   [] == false;
  3.   [] == 0;  // 符合顺序4,boolean 转 number
  4.   0 == 0;  // 符合顺序4,array 转 number
  5.   return true

  •  {} == !{}; // false
  1.   {} == !true; // ! 优先级最高,第一步执行将 ! 右侧转为 boolean
  2.   {} == false;
  3.   {} == 0;  // 符合顺序4,boolean 转 number
  4.   NaN == 0;  // 符合顺序4,object 转 number
  5.   return false;


  •   ''== ![]; // true
  1.   '' == !true;
  2.   '' == false;
  3.   '' == 0;
  4.   0 == 0;
  5.   return true;


  • '' == []; // true
  1.   0 == 0;
  2.   return true;


  • '' == !{};  // true
  1.   '' == !true;
  2.   '' == false;
  3.   0 == 0;
  4.   return true;


  • '' == {};   // false
  1.   0 == NaN;  // false