javascript关于==理解

{}=={}//false   {}==!{}//false   []==[] //false   []==![]//ture    这是为什么呢?

先写这么一段话吧,如果是跟 boolean相比较 比如 ture=='ture'//false 
这又是为什么呢 ?这又该怎么理解呢 ?先说 ture=='ture'为什么结果是false 这就牵扯到隐式转化,我也看到了很多文章,跟视频,说说我的理解,如果等号一方是boolean的话,那么两边都需要转化成Number类型,在做比较 那么 这是怎么操作的呢?

左侧的ture---> Number(ture)//---->1,而右侧则是 Number('ture')---->//NaN  因为 NaN跟任何相比都是 false 在提一笔 NaN==NaN //false 而自身都跟自身不相等 那他跟任何相比都是false  那么 ture =='ture' 这个我已经解释了 

那么来解释 {} =={}//false 这里又会有执行顺序及优先级 可以看我上一篇 文章 写的就是 优先级 在优先级相等情况下都是从右向左执行  这里我就要再提一个东西  因为 object 是引用类型 值存在堆内存中,比较的地址 所以 是 false

 除了 undefiend null ''(空字符串) 0 NaN  其余的都是ture 

 那么解释{}==!{} 从右向左开始 {}--->ture -->!ture--->Number(false)--->0  而左边 {}执行却是 --->({})[Symbol.toPrimitive]//(如果存在是一个函数)则---> ({})[Symbol.toPrimitive](hint)//hint有二个参数 ‘number’,‘string’, 传入什么最后返回什么类型的值,如果[Symbol.toPrimitive]返回undefiend 则 继续调用 valueOf()//返回原始值,返回则是''({}).toString()//"[Object Object]"--->Number('[Object Object]')//NaN 则下来对比 NaN==0很显然 是false  


[]==[] 因为是引用类型 存放在堆内存中比较的是地址 所以是 false

[]==![] 同上解释{}==!{} 从右执行 最右边 []--->ture--->!ture--->false---->Number(false)--->0
接下来是左边 []--->([])[Symbol.toPrimitive]//undefiend--->([]).valueOf()//[](空数组)--->([]).toString()//''(空字符串)--->Number('')// --->0 则0==0 返回ture

题外 在解释 一下 为什么 if([]) 会执行通过呢 这里也有个隐式转化 Boolen([])//ture

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值