Object
类型console.log(typeof []); //object
console.log(typeof {}); // object
Number
不一样对象转化为Number都是NaN,数组视情况而定
console.log(Number([])); 0
console.log(Number([1])); 1
console.log(Number([1,2])); NaN
console.log(Number(['嗷嗷嗷'])); NaN
console.log(Number({})); NaN
console.log(Number({x:1})); NaN
由于空数组[]
和空对象{}
都是Object
类型,因此用if()
判断的时候,都为true
其实本来二者转化为布尔值就是true:
console.log(Boolean([])); //true
console.log(Boolean({})); //true
这是因为任何值和布尔值比较时,两边都会转化为Number类型
console.log([]==true); //false(0 === 1)
console.log({}==true); //false(NaN === 1)
'空字符串'
、0、
、NaN
、 null
、undefined
if(!arr.length) 如果数组为空,那么执行if里面的逻辑
或者
if(!arr[0]) 如果数组为空,那么执行if里面的逻辑 (空数组里面的元素是undefined)
undefined 只与 null 相等,他们自身也与其自身相等,除此之外其他值都不和他们想等
但是相等性检查 == 和普通比较符 > < >= <= 的代码逻辑是相互独立
的!
进行值的比较时,null 会被转化为数字,因此它被转化为了 0。这就是为什么null >= 0
返回值是 true;
但是!null在做==
判断时,不会进行类型的转换,这就是为什么null == 0
返回的是false
而undefined进行转换为值时又不一样了, (1) 和 (2) 都返回 false 是因为 undefined 在比较中被转换为了 NaN,而 NaN 是一个特殊的数值型值,它与任何值进行比较都会返回 false。
console.log( undefined >= 0 ); // false (1)
console.log( undefined < 0 ); // false (2)
console.log( undefined == 0 ); // false (3)
console.log( undefined==null ); //true (4)
console.log( null > 0 ); // (1) false
console.log( null == 0 ); // (2) false
console.log( null >= 0 ); // (3) true
参考博客:
https://blog.csdn.net/IT_10/article/details/81806665
https://blog.csdn.net/Fky_mie/article/details/115856032