null 与 undefined 的区别

在 JavaScript 中,null 和 undefined 都表示“无”或“空”,但它们的含义、使用场景和行为有本质区别:

  • null 的类型是 object
  • undefined 的类型是 undefined
typeof null;      // "object"
typeof undefined;   // "undefined"

一、区分

  • null 表示一个空对象指针。 也就是说,它通常表示一个对象应该存在,但目前是空值。 它是一种故意为之的“无值”。 程序赋予的。
  • undefined 表示一个变量声明了但未赋值,或者一个对象缺少某个属性,或者函数没有返回值(或者 return 语句没有明确返回值)。 它是一种更偏向于“不存在”或者“未定义”的含义。 引擎赋予的。

理解:

  • 对于 null 你可以把它想象成一个盒子,这个盒子存在,但是里面是空的。 你明确地知道这个盒子什么都没有装。
  • 对于 undefined 你可以把它想象成根本没有这个盒子。 它未曾被声明,或者本该是某个盒子的东西,现在没了。

二、null 的使用场景

1.显示的表示“空值”

显式地赋值给一个变量,用来表示该变量目前不引用任何对象

let data = null; // 明确表示“无数据”

let myObject = { name: "Alice" };
myObject = null;  // 现在 myObject 不再指向任何对象

2.释放对象引用

let obj = { name: "Alice" };
obj = null; // 帮助垃圾回收机制释放内存

三、undefined 使用场景

1. 变量声明但未赋值

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

2.​​函数无返回值时

function foo() {}
console.log(foo()); // undefined

3.访问对象不存在的属性

const obj = {};
console.log(obj.key); // undefined

4.函数参数未传递时

function bar(param) {
  console.log(param); // undefined(未传参)
}
bar();

四、比较

​行为​undefinednull
typeof 结果"undefined""object"(历史遗留 Bug)
​与自身比较​undefined === undefined → truenull === null → true
​宽松相等(==)​undefined == null → true(因为它们都被视为“假值”)
​严格相等(===)​undefined === null → false(类型不同)

 五、总结

维度​undefinednull
​来源​系统自动分配开发者手动赋值
​语义​“值未定义”(意外情况)“值为空”(主动意图)
​类型检查​类型是 undefined类型是 object(历史遗留问题)
​内存占用​无(原始值)空指针(不指向任何对象)

最佳实践:

  • 尽量使用 === 和 !== 进行比较,避免类型转换带来的意外结果。
  • 显式地将变量赋值为 null 来表示该变量目前不引用任何对象。
  • 尽量避免出现 undefined,可以通过预先赋值或者检查属性是否存在来避免。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值