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(),数组中有此方法,在布尔类型里也有此方法;