[]==false为什么为true分析,扩展null==0是什么结果

还是时间啊,这个问题3年前,甚至更早,就有人分析过了,现在我只是在追赶别人。。。转行晚啊,少壮不努力,老大徒伤悲啊,真是深有感触
现在把自己弄懂得,记录下来,放在这里,网站不倒,至少自己的东西就不会消失,别人的文章总是靠不住的,说不定什么时候就打不开连接了

转到正文

1 .为什么[]==false 为true;
首先还要从js基础,toString和valueOf方法来判断
(1)都知道0==0;0 ==‘’
是因为,第一个就是相等,第二个是做了隐式转换(==情况下)
但是,怎么做的隐式转换.,是Number(”)转换为0,所以相等

0==''
//0==Number('')  //true

但是,隐式转换只能转换原始值类型,[]可不是原始值类型,那是怎么实现的呢
(2)[]==0如何实现
这就用到前面说的toString和valueOf了
当判断中,发现有一边不是原始值类型,就会先调用valueOf方法进行转换

[].valueOf() //[]

发现valueOf转化完后,依然不时原始值类型,那继续用toString方法转换

[].toString()//""

转换完毕,发现转成了原始值类型”“;
下面继续用Number转换

Number("")==0 //true

(3) []==false
接上面,[]最终转化为””
但此时,”“==false,依然不可比较,左右两边会Number进行转换

Number('')==Number(false)  //0==0  true;

经过层层转换,所以才最后判断出为true

  1. 扩展1,![]==false为什么为true
    (1)首先,涉及到运算符优先级
    js运算符优先级,点此处查看
    因为!比==优先运算,所以先计算![]
    在js中,空字符串(”),NaN,0,null, undefined,false这几个,其他返回的都是true
    所有值转布尔类型都是true。一切对象都是真值,包括new Boolean(false)
    所以![]为false, ![]==false为true;

3.扩展2 null==0;结果是什么
首先要确定,到做==比较的时候,都会把非原始值,转为原始值
null.valueOf会报TypeError,会继续null.toString还是TypeError
既然转不成功共,那必然,null==0为false,除了undefined和null本身外的值,都是false,

null==undefined  //true 
null===undefined //false  类型不同

可能还有理解不对的地方,留着以后发现问题,继续深入研究

附上别人的研究结果,可以去看看别人如何分析这方面

JavaScript里什么情况下a==!a为true呢?

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值