isNaN 和 Number.isNaN 函数有什么区别?
isNaN 和 Number.isNaN 都是 JavaScript 中用于检查值是否为 "NaN"(Not-a-Number)的函数,但它们在判断的逻辑上有所不同。
1.
isNaN
isNaN 是全局函数,用于判断一个值是否是 NaN 或是否不能转换为一个有效的数字。如果传入的值无法被转换成数字,isNaN 会返回 true,否则返回 false。
特点:
isNaN会先尝试将传入的值转换为数字。- 如果值本身不是数字(例如字符串、对象等),它会尝试强制转换为数字,然后判断转换后的结果是否是
NaN。
示例:
isNaN('hello'); // true,因为字符串 'hello' 不能被转换为数字
isNaN(123); // false,已经是一个有效数字
isNaN('123'); // false,因为字符串 '123' 会被转换为数字 123
isNaN(true); // false,因为布尔值 true 会被转换为数字 1
isNaN(undefined); // true,因为 undefined 不能转换为有效的数字
2.
Number.isNaN
Number.isNaN 是 Number 对象的方法,用于严格检查传入的值是否 是 NaN,而不做类型转换。如果传入的值本身就是 NaN,才返回 true,否则返回 false。
特点:
Number.isNaN不会进行类型转换,只会判断值是否严格等于NaN。- 如果值不是
NaN,无论它是什么类型,它都返回false。
示例:
Number.isNaN('hello'); // false,因为 'hello' 不是 NaN
Number.isNaN(123); // false,123 不是 NaN
Number.isNaN(NaN); // true,因为它是 NaN
Number.isNaN(undefined); // false,undefined 不是 NaN
主要区别:
-
类型转换:
isNaN会首先将参数强制转换为数字,然后判断结果是否为NaN;而Number.isNaN不会进行任何类型转换,它只会返回true如果传入的值本身就是NaN。 -
准确性:由于
isNaN会进行类型转换,它可能会导致一些意外的结果(例如,isNaN('123')返回false,虽然'123'不是NaN,但它会被转换为数字)。而Number.isNaN更精确,它只返回true当且仅当传入的值是NaN。
总结:
isNaN:先转换为数字,如果转换结果是NaN,返回true。Number.isNaN:严格检查值是否是NaN,没有类型转换。
通常情况下,Number.isNaN 更为准确,因此在判断是否是 NaN 时,推荐使用 Number.isNaN。
721

被折叠的 条评论
为什么被折叠?



