javascript不同类型对象比较规则

Type(x)Type(y)Result
type(x)==type(y)x===y
otherwise...false
nullundefinedtrue
undefinednulltrue
NumberStringx==toNumber(y)
StringNumbertoNumber(x)==y
Boolean(any)toNumber(x)==y
(any)Booleanx==toNumber(y)
String or NumberObjectx==toPrimitive(y)
ObjectString or NumbertoPrimitive(x)==y


例子一: 

[0]==ture;

首先会把ture进行toNumber,结果为1,式子及转化为 [0]==1

然后[0]会被toString(),结果为“0”,式子转化为“0”==1

接着“0”会被toNumber(),结果为0,式子转化为0==1

最后根据type(x)==type(y),式子转化为0===1

所以[0]==true会得到false 

 


 例子二:

“potato”==true;

首先true会被toNumber,结果为1,式子转化为“potato”==1

然后“potato”会被toNumber,结果为NaN,式子转化为NaN==1

根据typeof(x)==typeof(y),式子转化为NaN===1

所以“potato”==true会得到false

 


例子三:

 object with getValue

str = new Number(1);

str.toString = function(){return "2"};

str==1; 

 

这里typeof str == "object",所以对str进行toPrimitive,这里会对str进行valueOf取值得到1

所以式子转化为1==1

所以str==1得到true

 


例子四:

object with toString

var obj = {

toString : function(){return "2"} 

}; 

 obj==1

 

这里typeof obj == "object",对obj进行toPrimitive,首先进行valueOf得到object,继续进行toString()得到“2”,式子专为"2"==1

对“2”进行toNumber得到2,式子转为2==1

所以obj==1得到false 


例子5:

[]==[]

左右是不同的对象,所以false

![]==[]

首先![]==false,这里[]是一个即存在的对象,若将其强制专为bool类型,通过!![]得到ture,所以![]==false,此时式子专为false==[] 

然后false专为0,式子专为0==[]

然后[]专为"",式子专为0==“”

然后""转为0,式子专为0==0

所以![]==[]得到true


例子6:

!{}=={}

首先!{}专为false,规则和5一样,式子转为false=={}

false专为0,式子转为0=={}

对{}进行toPrimitive得到"[object Object]",式子专为0=="[object Object]"

对"[object Object]"进行toNumber得到NaN,式子专为0==NaN

所以!{}=={}得到 false 

转载于:https://www.cnblogs.com/simayixin/archive/2011/03/21/1990831.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值