NaN的全称是…
NaN为什么存在
它表示应该返回一个number,但是缺没有返回一个number的情况。它之所以存在,是为了在某些异常情况下,让程序能够正常执行。就比如说用任意一个数字除以0,在java中会报错,但是在js中不会报错
public class DivideByZero {
public static void main(String[] args) {
int number = 0;
int result = number / 0; // 这里会抛出ArithmeticException
System.out.println(result);
}
}
Exception in thread "main" java.lang.ArithmeticException: / by zero
console.log(5 / 0); // 输出: Infinity
console.log(-5 / 0); // 输出: -Infinity
console.log(0 / 0); // 输出: NaN
它为什么会报错呢?因为在数学中,0是不能作为除数的,所以Java会抛出异常,终止程序的执行。但是在JavaScript中因为有NaN这么一个值的存在,它使得程序能够稳定执行下去。
NaN的特点
一:与任何值相加都会得到NaN
1。与任何数字相加都会得到NaN
2。NaN与自身相加也会得到NaN
3.NaN+undefined也会得到NaN
console.log(NaN + 5); // 输出: NaN
console.log(NaN + "hello"); // 输出: NaN
console.log(NaN + true); // 输出: NaN
console.log(NaN + false); // 输出: NaN
console.log(NaN + null); // 输出: NaN
console.log(NaN + undefined); // 输出: NaN
console.log(NaN + {}); // 输出: NaN
console.log(NaN + []); // 输出: NaN
二:与任何值都不相等
console.log(NaN === NaN); // 输出: false
console.log(NaN === 5); // 输出: false
console.log(NaN === 'string'); // 输出: false
console.log(NaN === undefined); // 输出: false
console.log(NaN === null); // 输出: false
console.log(NaN === true); // 输出: false
区别是什么
ES5之前:isNaN()
ES6:Number.isNaN
概念:
isNaN(): 检查一个值是否是 NaN 或者是其他非数字值(如字符串)并尝试转换为数字。
Number.isNaN(): 仅检查一个值是否是 NaN。
console.log(isNaN(NaN)); // true
console.log(isNaN("apple")); // true,因为"apple"不是一个数字,并且不能转换为数字
console.log(isNaN(123)); // false,因为123是一个数字
console.log(isNaN("123")); // false,因为"123"可以被转换为数字
console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN("apple")); // false,因为它只检测 NaN,不关心其他值
console.log(Number.isNaN(123)); // false
console.log(Number.isNaN("123")); // false