文章目录

JavaScript 类型问题:NaN、null、undefined 的判断

发布于 2026-04-05 05:56:54 · 浏览 22 次 · 评论 0 条

JavaScript 类型问题:NaN、null、undefined 的判断

在 JavaScript 开发中,类型判断是每天都会遇到的基础问题。这三个值——NaNnullundefined——看似简单,却经常让人混淆。掌握它们的判断方法,是写好 JavaScript 代码的第一步。


先搞懂:这三个值有什么区别?

理解本质,才能正确判断。这三个值代表完全不同的含义。

NaN 是 "Not a Number"(非数字)的缩写,表示一个数学运算失败了。比如用 0 除以 0,或者把 "abc" 转成数值时,就会得到 NaN。特别注意:NaN 的数据类型仍然是 number,这是一个常见的困惑点。

null 表示"空值"或"无对象",是开发者主动赋值的结果,用来告诉程序这个变量当前没有指向任何有效对象。

undefined 表示"未定义"。变量声明后没赋值、函数没有返回值、访问对象不存在的属性时,返回的就是 undefined


精确判断:每种值的最佳实践

判断 undefined

判断 undefined 有两种常用方式。第一种是直接用严格相等运算符:

let a;
console.log(a === undefined);  // true

let obj = { name: 'Tom' };
console.log(obj.age === undefined);  // true,属性不存在

第二种是用 typeof,这种方式更安全,即使访问一个未声明的变量也不会报错:

console.log(typeof a === 'undefined');  // true
console.log(typeof undefined === 'undefined');  // true

判断 null

判断 null 必须用严格相等运算符 ===,绝对不能用 ==

let a = null;
console.log(a === null);  // true
console.log(null === null);  // true

这里有一个重要的坑:typeof null 返回的是 'object' 而不是 'null'。这是 JavaScript 诞生时留下的历史 bug,不能用来判断 null

判断 NaN

NaN 是最特殊的值,因为它有一个反直觉的特性——它与任何值的比较,包括与自身比较,结果都是 false

console.log(NaN === NaN);  // false
console.log(NaN == NaN);  // false

所以判断 NaN 必须用 Number.isNaN() 方法:

console.log(Number.isNaN(NaN));  // true
console.log(Number.isNaN(0 / 0));  // true
console.log(Number.isNaN(5));  // false

区分 isNaN() 和 Number.isNaN()

全局函数 isNaN()Number.isNaN() 行为不同。前者会先把参数转成数值再判断:

console.log(isNaN('hello'));  // true,'hello' 转成 NaN
console.log(isNaN('123'));  // false,'123' 可以转成 123

console.log(Number.isNaN('hello'));  // false,'hello' 不是 NaN
console.log(Number.isNaN(NaN));  // true

优先使用 Number.isNaN(),它只在值真正是 NaN 时才返回 true


综合场景:如何一次判断多种情况?

封装一个判断函数是常用的实践方式:

function isUndefined(value) {
    return value === undefined;
}

function isNull(value) {
    return value === null;
}

function isNaN(value) {
    return Number.isNaN(value);
}

function isEmpty(value) {
    return value === undefined || value === null;
}

常见误区:千万别这么写

误区一:试图用 typeof 判断 null

console.log(typeof null);  // 'object',这是语言 bug
console.log(typeof null === 'null');  // false,错误!

误区二:用 == 同时判断 null 和 undefined

console.log(null == undefined);  // true,但这不意味着它们是同一个值

抽象相等会让 nullundefined 相等,但判断时必须明确指定。

误区三:把假值当作 null 或 undefined 处理

空字符串 ''、数字 0、布尔值 false 都是合法的值,不要误判:

console.log('' === null);  // false
console.log(0 === undefined);  // false
console.log(false === null);  // false

如果业务上需要判断这些"假值",应该用更宽泛的条件:

function isFalsy(value) {
    return !value;
}
console.log(isFalsy(''));    // true
console.log(isFalsy(0));     // true
console.log(isFalsy(null));  // true

一张表记住所有判断方法

判断需求 正确写法 返回 true 的情况
判断 undefined value === undefined 值是 undefined
判断 null value === null 值是 null
判断 NaN Number.isNaN(value) 值是 NaN
判断 null 或 undefined value === null \|\| value === undefined 值是 null 或 undefined
判断假值(空字符串、0、false 等) !value 值是任意假值

实际开发中的建议

处理用户输入或外部数据时,按以下顺序判断是稳妥的做法:

  1. 先判断 undefined 或 null:用 value === null || value === undefined
  2. 再判断 NaN:特别是涉及数学运算时
  3. 最后处理具体业务逻辑
function processInput(input) {
    if (input === null || input === undefined) {
        return '请输入有效值';
    }
    if (Number.isNaN(input)) {
        return '请输入数字';
    }
    return input * 2;
}

优先使用 Number.isNaN() 判断 NaN,使用 === undefined 判断 undefined,使用 === null 判断 null。这些方法可靠、直观、不易出错。

评论 (0)

暂无评论,快来抢沙发吧!

扫一扫,手机查看

扫描上方二维码,在手机上查看本文