特殊值进行比较
NaN,undefined,null,false与自身相比,只有NaN==NaN是false;不等是true。
然后两两相比,得出结论。> < >= <= == != === !==.注:连接运算+优先级高于比较运算符。
做实验用的模板:notepad++中查找替换
console.log("x> y 的结果是:"+(x> y ));
console.log("x< y 的结果是:"+(x< y ));
console.log("x>= y 的结果是:"+(x>= y ));
console.log("x<= y 的结果是:"+(x<= y ));
console.log("x== y 的结果是:"+(x== y ));
console.log("x!= y 的结果是:"+(x!= y ));
console.log("x===y 的结果是:"+(x===y ));
console.log("x!==y 的结果是:"+(x!==y ));
1.NaN与undefined,NaN与null都不相等
console.log("NaN==NaN的结果是:"+(NaN==NaN));//false
console.log("NaN!=NaN的结果是:"+(NaN!=NaN));//true
//结论1:NaN不与自身相等,NaN之间不存在可比性,因为它代表不是一个数,至于是什么NaN不知道。
console.log("NaN> undefined 的结果是:"+(NaN> undefined )); // false
console.log("NaN< undefined 的结果是:"+(NaN< undefined )); // false
console.log("NaN>= undefined 的结果是:"+(NaN>= undefined )); // false
console.log("NaN<= undefined 的结果是:"+(NaN<= undefined )); // false
console.log("NaN== undefined 的结果是:"+(NaN== undefined )); // false
console.log("NaN!= undefined 的结果是:"+(NaN!= undefined )); // true
console.log("NaN===undefined 的结果是:"+(NaN===undefined )); // false
console.log("NaN!==undefined 的结果是:"+(NaN!==undefined )); // true
NaN与null和false结果都是一样的,都不相等。
2.undefined与null和false相比
console.log("undefined== null 的结果是:"+(undefined== null ));//true
console.log("undefined!==null 的结果是:"+(undefined!==null ));//true
//结论:undefined与null只有在比较是否等时会强制转化为布尔型false,两个false相比是true,由于类型不一样,故不全等也是true。其它不作转化当然无法比全是false。
console.log("undefined!= false 的结果是:"+(undefined!= false ));//true
console.log("undefined!==false 的结果是:"+(undefined!==false ));//true
//结论:undefined与false是不相等的。undefined与0的比较结果与false一样的。
//undeined比较大小时转化为NaN
3.null与false相比
console.log("null> false 的结果是:"+(null> false )); //false
console.log("null< false 的结果是:"+(null< false )); //false
console.log("null>= false 的结果是:"+(null>= false )); //true
console.log("null<= false 的结果是:"+(null<= false )); //true
console.log("null== false 的结果是:"+(null== false )); //false
console.log("null!= false 的结果是:"+(null!= false )); //true
console.log("null===false 的结果是:"+(null===false )); //false
console.log("null!==false 的结果是:"+(null!==false )); //true
//结论:null与false在作相等判断时不作转化二者是不一样的。在作比较大小时二者都转化为0进 行比较。null与0的比较结果与false一样。
4.false与0
console.log("false> 0 的结果是:"+(false> 0 )); //false
console.log("false< 0 的结果是:"+(false< 0 )); //false
console.log("false>= 0 的结果是:"+(false>= 0 )); //true
console.log("false<= 0 的结果是:"+(false<= 0 )); //true
console.log("false== 0 的结果是:"+(false== 0 )); //true
console.log("false!= 0 的结果是:"+(false!= 0 )); //false
console.log("false===0 的结果是:"+(false===0 )); //false
console.log("false!==0 的结果是:"+(false!==0 )); //true
结论:false转化为0进行运算。
总的结论:比较大小时若类型不一致通过Number转化为数值进行比较,undefined为NaN,null为0,false为0,true为1。
比较相等时如果有一方是数值,另一方也转化为数值。两方都不是数值也不是布尔时强制转化为boolean进行比较,若一方是布尔另一方不作任何转化进行比较,结果都是不相等的。