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// 0Number([6]) // [6].toString() -> '6' -> Number('6') -> 6// 6Number(['7']) // [7].toString() -> '7' -> Number('7') -> 7// 7Number([6, 1]) // [6, 1].toString() -> '6,1' -> Number('6,1') -> NaN// NaNNumber(['i']) // ['i'].toString() -> 'i' -> Number('i') -> NaN// NaNNumber([undefined]) // [undefined].toString() -> '' -> Number('') -> 0// 0Number(new Array(1)) // new Array(1) ->[empty] -> [empty].toString() -> '' -> Number() -> false// 0
