Number.isNaN和isNaN有什么区别?
在JavaScript中,Number.isNaN 和全局的 isNaN 函数都用于确定某个值是否是 "NaN"(Not-A-Number,非数字)。然而,它们的行为在处理非数字值时有显著的区别。
- 全局的
isNaN函数:
全局的 isNaN 函数在接收参数后,会首先尝试将参数转换为数字。如果转换成功,则进一步检查转换后的值是否为 NaN。如果转换失败,它仍然会返回 true。这意味着,对于一些非数字值,全局的 isNaN 函数可能会返回 true,即使这些值在转换为数字后并不是 NaN。
例如:
isNaN('hello'); // true,因为 'hello' 在转换为数字时失败,所以返回 true
isNaN(123); // false,因为 123 是一个数字,且不是 NaN
Number.isNaN函数:
相比之下,Number.isNaN 函数在接收参数后,并不会尝试将参数转换为数字。它只会检查参数是否严格等于 NaN。如果参数不是 NaN,那么无论它是什么类型,Number.isNaN 都会返回 false。
例如:
Number.isNaN('hello'); // false,因为 'hello' 并不严格等于 NaN
Number.isNaN(NaN); // true,因为 NaN 严格等于 NaN
总结:
- 全局的
isNaN函数在检查前会尝试进行类型转换,这可能导致一些非预期的结果。 Number.isNaN函数则更为严格,它只在值严格等于NaN时返回true。这通常使得Number.isNaN在判断一个值是否确实是NaN时更为可靠。因此,在大多数情况下,推荐使用Number.isNaN。
浙公网安备 33010602011771号