null和undefined有什么区别?
面试建议回答八股文的流程(让面试官觉得你是真实开发中用到,而不是背的):
1.说出null和nudefined定义和类型
2.对null和undefined的个人理解(本文第三点有提到)
3.在开发过程中怎么正确的使用null和undefined(举例比如通过null 定义未来需要保存对象 let obj = null 等,也可以看看自己项目哪里用到去跟面试官说!)
一、核心区别
-
类型与定义
-
null:表示“空对象指针”,属于
object
类型(typeof null
返回"object"
),需显式赋值 。 -
undefined:表示“未定义”或“未初始化”,属于
undefined
类型(typeof undefined
返回"undefined"
),是未赋值变量的默认值 。
-
null:表示“空对象指针”,属于
-
数值转换结果
-
null
转换为数值时为 0(如Number(null)
返回 0)。 -
undefined
转换为数值时为 NaN(如Number(undefined)
返回 NaN)。
-
-
比较行为
- 非严格相等(
==
)时,null == undefined
返回true
;但严格相等(===
)时返回false
(类型不同)。
- 非严格相等(
二、使用场景对比
场景 | null | undefined |
---|---|---|
变量初始化 | 显式表示变量未来将保存对象(如 let obj = null; ) |
变量声明但未赋值时的默认值(如 let a; ) |
函数参数与返回值 | 作为参数表示“无对象”(如 fn(null) ) |
函数未传参或未返回值时的默认值(如 function foo() {} ) |
对象属性 | 显式清除对象引用(如 obj.ref = null ) |
访问未定义属性返回 undefined (如 obj.unknown ) |
原型链终点 | 原型链的终点(如 Object.prototype.__proto__ === null ) |
无此用途 |
三、个人理解与总结
-
设计初衷
- null:为解决早期 JavaScript 中空对象指针问题而设计,需手动赋值 。
- undefined:作为变量未初始化的默认值,由 JavaScript 引擎自动赋值 。
-
实践建议
-
避免混用:
null
用于显式表示“无对象”,undefined
表示“未定义”,两者语义不同,不可随意替换 。 -
类型检查:判断
null
用=== null
,判断undefined
用typeof
或void 0
(避免变量被覆盖)。
-
避免混用:
-
常见误区
-
隐式转换陷阱:在条件判断中,
null
和undefined
均转为false
,但全等比较时需注意类型差异 。 -
对象属性处理:删除对象属性应使用
delete
(返回undefined
),而非赋值为null
(仍保留属性键)。
-
隐式转换陷阱:在条件判断中,
四、面试回答示例
null 和 undefined 的核心区别包括:
1. 类型不同(null 是 object,undefined 是 undefined);
2. 数值转换结果不同(null→0,undefined→NaN);
3. 使用场景不同(null 显式表示空对象,undefined 表示未初始化)。
使用场景举例:
- 初始化对象变量用 null;
- 函数参数未传递时默认 undefined;
- 主动释放对象引用用 null。
上一篇: ExcelWrite
下一篇: FastJSON 默