典型例题: [] == ![]

首先这道题是以个JS隐式转换非常典型的例子,所以你一搜索就会看到很多博主都有其分析讲解,但我始终存在一些疑惑,通过整合了一下多个博客才得以解决。在这里把我的疑惑记录下来,希望对你有所帮助。

==”和“===”进行区分

这里不做赘述,望读者自行查阅。着重理解==,因为其涉及多种隐式转换,重要!!!

空数组[]的不同情况

1.空数组[]其本身的bool值
if([]){
   console.log("[] is true"); //[] is true
}

上述可知,空数组的bool值为true,这是因为在JS中数组中即使没有元素,它也是一个object,因此用于判断条件时,就会被转为true

2.空数组[]用于与bool值进行比较时

首先针对 [] == ![],等号右边存在取反符!,其优先级大于 == ,因此先计算右边,由第一条可知,此时是要得到 [] 用于判断条件时的bool值,[]为true,![]为false,上述等式变为[] == false
看到这里,你是否会觉得这与第一步提到的就相违背了?这里就请注意,前提条件,此时出现的==意味着是将空数组[]用于与bool值进行比较(==当等号一边出现boo值时,需将两边的值转化为数值类型,再进行比较)
等号左边,JS内部,对 [] 进行ToPrimitive()计算,先进行valueOf(),结果为依旧为数组,再进行tostring(),结果为空字符串,这时再转换成数值类型Number(’’),结果为0
等号右边,Number(false)结果为0
左边 == 右边,因此 [] == false

最终得到 [] == ![]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值