JavaScript中isNaN函数
isNaN 是 JavaScript 中的一个全局函数,用于检查一个值是否为 NaN(Not-a-Number)。然而,它的行为有时会让人感到困惑,因此需要结合 Number.isNaN 来理解其用法。
1. isNaN 的功能
- 作用:检查传入的值是否是
NaN。 - 返回值:如果值是
NaN,返回true;否则返回false。
2. isNaN 的问题
- 行为怪异:
isNaN会先将参数转换为数字,然后再检查是否为NaN。 - 结果可能不符合预期:对于非数字的值(如字符串),
isNaN也会返回true。
示例:
console.log(isNaN(123)); // false(数字,不是 NaN)
console.log(isNaN('123')); // false(字符串 '123' 转换为数字 123,不是 NaN)
console.log(isNaN('Hello')); // true(字符串 'Hello' 转换为数字失败,返回 NaN)
console.log(isNaN(NaN)); // true(NaN)
3. Number.isNaN 的改进
- 作用:严格检查一个值是否为
NaN,不会进行类型转换。 - 返回值:只有当值是
NaN时,返回true;否则返回false。
示例:
console.log(Number.isNaN(123)); // false(数字,不是 NaN)
console.log(Number.isNaN('123')); // false(字符串,不是 NaN)
console.log(Number.isNaN('Hello')); // false(字符串,不是 NaN)
console.log(Number.isNaN(NaN)); // true(NaN)
4. 使用场景
(1) 检查 NaN
- 使用
Number.isNaN严格检查NaN。const value = parseInt('abc'); if (Number.isNaN(value)) { console.log('解析失败,值为 NaN'); }
(2) 检查非数字值
- 如果需要检查一个值是否为数字,可以使用
isNaN结合类型检查。function isNotNumber(value) { return typeof value !== 'number' || isNaN(value); } console.log(isNotNumber('123')); // true(字符串,不是数字) console.log(isNotNumber(NaN)); // true(NaN) console.log(isNotNumber(123)); // false(数字)
总结
| 函数 | 行为 | 示例 | 推荐使用 |
|---|---|---|---|
isNaN | 先转换类型,再检查是否为NaN | isNaN('Hello') → true | 不推荐 |
Number.isNaN | 严格检查是否为NaN,不转换类型 | Number.isNaN('Hello') → false | 推荐 |
- 推荐使用
Number.isNaN:避免类型转换带来的意外行为。 - 避免直接使用
isNaN:除非明确需要类型转换的逻辑。
更多vue相关插件及后台管理模板可访问vue admin reference,代码详情请访问github