JavaScript篇:"null "和"undefined "傻傻分不清?老司机带你彻底搞懂 JavaScript 里的这两个坑!

412 阅读3分钟

🎓 作者简介前端领域优质创作者

🚪 资源导航: 传送门=>

🎬 个人主页:  江城开朗的豌豆

🌐 个人网站:    江城开朗的豌豆 🌍

📧 个人邮箱: YANG_TAO_WEB@163.com 📩

💬 个人微信:     y_t_t_t_ 📱

📌  座  右 铭: 生活就像心电图,一帆风顺就证明你挂了 💔

👥 QQ群:  906392632 (前端技术交流群) 💬

大家好,我是小杨,一个天天和 JavaScript 打交道的前端码农。今天想和大家聊聊一个看似简单却经常让人栽跟头的问题——null 和 undefined 到底有什么区别?相信我,看完这篇你就再也不会搞混了!

一、初识双胞胎

刚开始学 JS 的时候,我也经常把这两个货搞混。它们都表示“没有值”,但背后的含义完全不同:

let 我 = undefined;  // 声明了但还没赋值
let you = null;     // 明确表示这里应该空着

二、本质区别大揭秘

1. undefined:系统给的默认值

当出现以下情况时,你会得到 undefined

  • 变量声明了但没赋值
  • 函数没有 return 语句
  • 访问对象不存在的属性
function showExample() {
  // 没有return语句
}

let result = showExample();
console.log(result); // undefined

let obj = { name: '我' };
console(obj.age);    // undefined

2. null:开发者主动设置的空值

null 是我们程序员主动设置的空值,表示“这里应该有值,但我故意让它为空”。

// 表示这个元素不存在
const myElement = document.getElementById('不存在的ID'); 
console.log(myElement); // null

// 清空一个对象引用
let user = { name: '我' };
user = null;  // 明确表示不再引用这个对象

三、日常开发中的经典场景

场景1:函数参数默认值

function greet(name = '访客') {
  console.log(`你好,${name}!`);
}

greet(undefined); // "你好,访客!"(使用默认值)
greet(null);      // "你好,null!"(明确传入了null)

场景2:类型检查

typeof undefined; // "undefined"
typeof null;      // "object" (历史遗留问题!)

// 正确检测方法
console.log(我 === null);      // 检测null
console.log(我 === undefined); // 检测undefined

四、到底该用哪个?

根据我的经验,遵循这些原则:

  1. 让系统自动产生 undefined
  2. 当你主动想要表示“空”时用 null
  3. API设计时保持一致性(要么都用null,要么都用undefined)

五、一个让我加班两小时的坑

分享个真实案例:

const response = await fetch('/api/data');
const data = await response.json();

// 错误示范:
if (!data.我) {
  // 这里会误判 undefined、null、""、0、false!
}

// 正确做法:
if (data.我 === null || data.我 === undefined) {
  // 明确判断
}

六、总结表格

特性undefinednull
产生方式系统自动赋值开发者主动赋值
类型"undefined""object"
使用场景变量未初始化时主动清空引用时
相等判断== 时与null相等=== 时不相等

记住:undefined 是 JS 说“这里还没值”,null 是你说“这里我要它没值”!

你在项目中还遇到过哪些关于 null 和 undefined 的坑?欢迎在评论区分享~