面试题--对象之间的比较

var a = [1,2,3],
    b = [1,2,3],
    c = [1,2,4];
console.log(a==b);//false
console.log(a===b);//false
console.log(a>c);//false
console.log(a<c);//true

首先我们知道这是object对象类型中的数组类型,在对object类型进行 “=”比较的时候,要看比较对象的引用地址是否相同,很明显数组a与数组b不是一个对象,即引用地址不同,所以为 false;

第二个:“===”比较,是要类型与数值都相同,数值可以看得出来是相同的,但是比较的对象的引用地址不同也就是说一个是a家的一个是b家的,所以对象也不同。故为  false;

对于>,<的比较,首先用valueOf()的方法转换成基本类型的值,因为valueOf()方法返回的仍然是数组,然后用toString()转换成以逗号相隔的字符串,所以就变成了字符串的比较,字符串的比较是由左往右ASLL码的比较,1,2都是相同的,及比较3,4的ASLL码,4>3,所以第三个输出false,第四个输出true;

var a = [0];
if([0]){
   console.log(a == true);
}else{
   console.log("wut");
}

输出结果为:false;

在 if 语句的条件判断时,[0]先调用valueOf()返回非基本数据类型[0],然后调用toString方法返回字符串“0”,也就是 if("0"){...},条件成立,a通过数据类型转化为0,0在布尔类型中为false,false == true显然为false;

valueOf(),数组中有此方法,在布尔类型里也有此方法;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值