判断NaN
<script>
//方法1 NaN是唯一一个自身不等于自身的值
console.log(NaN === NaN);//false
//方法2,使用内置方法isNaN()判断
console.log(isNaN(NaN));//true
console.log(Object.prototype.toString.apply(NaN));//[object Number]
console.log(isNaN('123asd'));//true 注意这里返回了true
console.log(isNaN(undefined));//true 注意这里返回了true
console.log(isNaN(123));//false
console.log(isNaN(true));//false
console.log(isNaN(Infinity));//false
console.log(isNaN(null));//false
</script>
通过使用方法2,字符串返回true,说明我们需要加一层判断,判断参数类型是否为数值,再调用内置函数isNaN判断是否为NaN,通过Object.prototype.toString.apply(NaN)也可以进一步说明判断NaN类型是数值的合理性。
<script>
function if_NaN(param) {
if (typeof (param) == 'number' && isNaN(param)) {
return true
}
else {
return false
}
}
console.log(if_NaN(NaN));//true
console.log(if_NaN('123asd'));//false
console.log(if_NaN(undefined));//false
console.log(if_NaN(123));//false
console.log(if_NaN(true));//false
console.log(if_NaN(Infinity));//false
console.log(if_NaN(null));//false
</script>
0与-0的判断
<script>
console.log(0 === -0);//true
console.log(1 / 0);//Infinity
console.log(1 / -0);//-Infinity
function judge_zero(param) {
return param == 0 && 1 / param < 0
}
console.log(judge_zero(0));//false
console.log(judge_zero(-0));//true
</script>
我们得先了解0就是+0。因为0与-0用绝对相等判断,结果是相等的。
函数第一层先判断是否为0,
第二层,1/0的结果是Infinity,1/-0返回-Infinity,Infinity<0返回false,-Infinity>0返回true。