[]==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呢?

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liuchao1987330/article/details/78789489
个人分类: javascript
上一篇JS正则表达式 ,reg.test()时,慎重全局查找/.../g属性
下一篇es6--javascript数组降维,从es5分析到es6,(详解reduce方法)欢迎补充
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭