null和0和undefined的比较
alert( null > 0 ); // (1) false
alert( null == 0 ); // (2) false
alert( null >= 0 ); // (3) true
注意:这是因为相等性检查 ==
和普通比较符 >
< >= <=
的代码逻辑是相互独立的。进行值的比较时,null
会被转化为数字,因此它被转化为了 0
。这就是为什么(3)中 null >= 0
返回值是 true,(1)中 null > 0
返回值是 false。
另一方面,undefined
和 null
在相等性检查 ==
中不会进行任何的类型转换,它们有自己独立的比较规则,所以除了它们之间互等外,不会等于任何其他的值。这就解释了为什么(2)中 null ==
0
会返回 false。
关于undefined不应该和任何值进行比较。
alert( undefined > 0 ); // false (1)
alert( undefined < 0 ); // false (2)
alert( undefined == 0 ); // false (3)
(1) 和 (2) 都返回 false 是因为 undefined 在比较中被转换为了 NaN,而 NaN 是一个特殊的数值型值,它与任何值进行比较都会返回 false。
(3) 返回 false 是因为这是一个相等性检查,而 undefined 只与 null 相等,不会与其他值相等。
除非你非常清楚自己在做什么,否则永远不要使用 >=
> < <=
去比较一个可能为 null/undefined
的变量。对于取值可能是 null/undefined
的变量,请按需要分别检查它的取值情况。
例子1:
let s1 = null==0;
let s2 = null==0;
let s3 = null>=0;
let s4 = undefined>0;
let s5 = undefined<0;
let s6 = undefined==0;
console.log('s1: ',s1)
console.log('s2: ',s2)
console.log('s3: ',s3)
console.log('s4: ',s4)
console.log('s5: ',s5)
console.log('s6: ',s6)
结果:
例子2:
let s1 = 5 > 4;
let s2 = "apple" > "pineapple";
let s3 = "2" > "12";
let s4 = undefined == null;
let s5 = undefined === null;
let s6 = null == "\n0\n";
let s7 = null === +"\n0\n";
console.log('s1: ',s1)
console.log('s2: ',s2)
console.log('s3: ',s3)
console.log('s4: ',s4)
console.log('s5: ',s5)
console.log('s6: ',s6)
console.log('s7: ',s7)
结果:
标签:console,undefined,JavaScript,let,false,null,log From: https://blog.51cto.com/u_16830897/12126846