比较运算符
比较运算符常见问题
比较运算符结果一定是布尔值(true false)
- 两侧都是纯数字比较
- 纯数字字符串,布尔值,null参与运算,会进行隐式转换
- 等于,在判断两边关系时,尽可能让两侧相等,只判断数值不判断类型,null比较特殊,在参数=时不隐式转换为0。
console.log(123 == "123");
console.log(true == 1);
console.log(null == 0);
console.log(null === 0);
console.log(null <= 0);
结果: true true false false true
- !=不等于,在判断!=关系时,不要直接判断,而是看对立面==,如果为真那么!=一定为假;如果为假那么!=一定为真。同样!==也是一样
console.log(null != 0)
结果: true
- ===全等于,在判断两边关系时,尽可能让两边不相等。不但判断数值还判断数据类型是否相同。
console.log(123 === "123");
console.log(1 === true);
console.log(0 === null);
console.log(0 !== null)
结果:false false false true
小测试:
判断 3>2>1 的结果
比较运算符的顺序从左向右,先比较3>2结果为true,true>1比较,true会隐式转换为1,所以1>1结果为false
- NaN和infinity不会发生隐式转换
console.log(infinity == infinity);
console.log(infinity >= 10);
console.log(NaN >= NaN);
结果:true true false
结论:记住NaN不是一个数,所以比较==都是false
- 如果两侧都是字符串参与,不是比较字符串的长短,而是比较每一个字符Unicode编码。编码顺序越靠后越大数字(0-9)、大写字母(A-Z)、小写字母(a-z)。依次比较字符编码,如果第一位相同再比较第二位。
console.log("21" > "4");
console.log("21" <= "a");
console.log("A" <= "a");
console.log("gas" <= "gab");
结果: false true true false