JavaScript中的空数组和空对象布尔值是true还是false?

1.空数组和空对象都是Object类型

console.log(typeof []);  //object
console.log(typeof {}); // object

2.空数组和空对象转化为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

3.作为if语句的判断条件

由于空数组[]和空对象{}都是Object类型,因此用if()判断的时候,都为true

其实本来二者转化为布尔值就是true:

console.log(Boolean([]));  //true
console.log(Boolean({}));  //true

4.和布尔值比较却不是true

这是因为任何值和布尔值比较时,两边都会转化为Number类型

console.log([]==true);  //false(0 === 1)
console.log({}==true); //false(NaN === 1)

5.只有以下几个类型布尔值为false

'空字符串'0、NaNnullundefined

6.如何判断数组为空

if(!arr.length)  如果数组为空,那么执行if里面的逻辑

或者

if(!arr[0])  如果数组为空,那么执行if里面的逻辑 (空数组里面的元素是undefined)

7.关于null和undefined和0比较

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

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值