js 空数组是true还是false
注意全篇用的是 == ,而不是 ===,双等有隐式转换的功能。
任意值与【数字值/布尔值】比较,双等情况下,会将将两边的值转化为Number,再进行比较。
/**
* 1、[] -> Number([]) -> 0
* 2、再与右边的进行比较
*/
[] == 0
// true
/**
* 1、[] -> Number([]) -> 0
* 2、false -> Number(false) -> 0
* 3、左右边两边再进行比较
*/
[] == false
// true
/**
* 1、![] -> false -> Number(false) -> 0
* 2、[] -> Number([]) -> 0
* 3、左右边两边再进行比较
*/
[] == ![];
// true
Number([]) 为什么是 0,里边都做了什么?
实际上数组在Number之前都会执行toString()方法,将其先转换为字符串,在转换为Number。
可以参考Q2第6点
Number([]) // [].toString() -> '' -> Number('') -> 0
// 0
Number([6]) // [6].toString() -> '6' -> Number('6') -> 6
// 6
Number(['7']) // [7].toString() -> '7' -> Number('7') -> 7
// 7
Number([6, 1]) // [6, 1].toString() -> '6,1' -> Number('6,1') -> NaN
// NaN
Number(['i']) // ['i'].toString() -> 'i' -> Number('i') -> NaN
// NaN
Number([undefined]) // [undefined].toString() -> '' -> Number('') -> 0
// 0
Number(new Array(1)) // new Array(1) ->[empty] -> [empty].toString() -> '' -> Number() -> false
// 0