书接上文,我们就来仔细讲讲javascript中的null和undefineded

65 阅读2分钟

null 与 undefined 的区别详解

虽然在 JavaScript 中,null == undefined 返回 true,但它们在语义和使用场景上有本质区别。


✅ 一、定义对比

类型含义
undefined表示“未定义”——一个变量声明了但没有赋值,或属性不存在,或函数无返回值。系统默认的“空”状态。
null表示“有意为空”——程序员主动赋值为 null,表示“这里原本可能有值,但现在是空的”。

💡 简单记:

  • undefined 是 JavaScript 自己说:“这里还没给值”
  • null 是 程序员说:“我明确地把它设为空”

🧪 二、代码实例对比

1. 变量声明但未赋值 → undefined

javascript实战演练

let username;
console.log(username);        // undefined
console.log(typeof username); // "undefined"

2. 对象没有某个属性 → undefined

javascript实战演练

let user = { name: "Alice" };
console.log(user.age);        // undefined
console.log(typeof user.age); // "undefined"

3. 函数无返回值 → undefined

javascript
编辑
function doNothing() {
  // 没有 return
}
console.log(doNothing());     // undefined

4. 函数参数未传 → undefined

javascript实战演练

function greet(name) {
  console.log("Hello, " + name);
}
greet(); // Hello, undefined

5. 主动设置为空 → null

javascript
编辑
let currentUser = null; // 表示当前没有用户登录
console.log(currentUser);        // null
console.log(typeof currentUser); // "object" ❗(历史 bug)

6. 清除对象引用

javascript实战演练

let data = { info: "sensitive" };
data = null; // 主动释放,表示不再使用

⚖️ 三、关键区别总结

对比项undefinednull
类型undefinedobject(JS 历史 bug)
谁赋的值JavaScript 自动赋值程序员主动赋值
语义“未定义”、“还没初始化”“有定义,但值为空”
常见场景声明未赋值、属性不存在、函数无返回初始化变量、清空引用、API 返回空对象
类型检测typeof x === 'undefined'x === null
== 比较null == undefined → true
=== 比较null === undefined → false

✅ 四、如何正确判断?

❌ 错误方式(容易出错):

javascript实战演练

if (value == null) {
  // 这会同时匹配 null 和 undefined!
}

✅ 推荐方式:

1. 区分判断:
javascript
编辑
if (value === null) {
  console.log("值是 null");
} else if (value === undefined) {
  console.log("值是 undefined");
}
2. 同时处理 null 和 undefined(常见于默认值):
javascript实战演练

// 使用 ?? 操作符(空值合并)
let name = userInput ?? "默认用户名";

// 等价于:
let name = (userInput !== null && userInput !== undefined) 
           ? userInput 
           : "默认用户名";

💡 ?? 操作符只在值为 nullundefined 时使用默认值,不会影响 0false"" 等。


📌 五、最佳实践建议

  1. 不要手动给变量赋 undefined
    应该用 null 来表示“空值”,undefined 留给 JS 自动处理。

  2. 初始化对象或未来要赋值的变量时,用 null

    javascript实战演练
    
    let currentUser = null; // 明确表示“暂无用户”
    
  3. 检测是否“有值”时,优先用 == null??

    javascript实战演练
    
    if (data == null) {
      // 处理 null 或 undefined
    }
    
  4. 严格区分时,使用 === null=== undefined


✅ 总结一句话:

undefined 是“没有设置”,null 是“设置为空”
一个代表“缺失”,一个代表“清空”。

掌握这个区别,能让你写出更清晰、更少 bug 的 JavaScript 代码!

如有需要,我可以提供相关练习题帮助巩固理解。