码迷,mamicode.com
首页 > Web开发 > 详细

转:js不同类型对象的比较规则

时间:2014-07-22 22:40:15      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:style   color   os   io   cti   re   

Type(x)Type(y)Result
type(x)==type(y) x===y
otherwise... false
null undefined true
undefined null true
Number String x==toNumber(y)
String Number toNumber(x)==y
Boolean (any) toNumber(x)==y
(any) Boolean x==toNumber(y)
String or Number Object x==toPrimitive(y)
Object String or Number toPrimitive(x)==y

 

~~~1.总是转换为相同的原始类型再做判断,2.逻辑值总是转换为数值类型,3.数值类型和字符串类型比较,总是把字符串转为数值。

例子一: 

[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 

转:js不同类型对象的比较规则,布布扣,bubuko.com

转:js不同类型对象的比较规则

标签:style   color   os   io   cti   re   

原文地址:http://www.cnblogs.com/stephenykk/p/3860308.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!