null和undefined有什么区别?

 面试建议回答八股文的流程(让面试官觉得你是真实开发中用到,而不是背的):

        1.说出null和nudefined定义和类型

        2.对null和undefined的个人理解(本文第三点有提到)

        3.在开发过程中怎么正确的使用null和undefined(举例比如通过null 定义未来需要保存对象 let obj = null 等,也可以看看自己项目哪里用到去跟面试官说!)

一、核心区别

  1. 类型与定义
    • null:表示“空对象指针”,属于 object 类型(typeof null 返回 "object"),需显式赋值 。
    • undefined:表示“未定义”或“未初始化”,属于 undefined 类型(typeof undefined 返回 "undefined"),是未赋值变量的默认值 。
  2. 数值转换结果
    • null 转换为数值时为 0(如 Number(null) 返回 0)。
    • undefined 转换为数值时为 NaN(如 Number(undefined) 返回 NaN)。
  3. 比较行为
    • 非严格相等(==)时,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 无此用途

三、个人理解与总结

  1. 设计初衷
    • null:为解决早期 JavaScript 中空对象指针问题而设计,需手动赋值 。
    • undefined:作为变量未初始化的默认值,由 JavaScript 引擎自动赋值 。
  2. 实践建议
    • 避免混用null 用于显式表示“无对象”,undefined 表示“未定义”,两者语义不同,不可随意替换 。
    • 类型检查:判断 null 用 === null,判断 undefined 用 typeof 或 void 0(避免变量被覆盖)。
  3. 常见误区
    • 隐式转换陷阱:在条件判断中,null 和 undefined 均转为 false,但全等比较时需注意类型差异 。
    • 对象属性处理:删除对象属性应使用 delete(返回 undefined),而非赋值为 null(仍保留属性键)。

四、面试回答示例

null 和 undefined 的核心区别包括:

        1. 类型不同(null 是 object,undefined 是 undefined);

        2. 数值转换结果不同(null→0,undefined→NaN);

        3. 使用场景不同(null 显式表示空对象,undefined 表示未初始化)。

使用场景举例:

        - 初始化对象变量用 null;

        - 函数参数未传递时默认 undefined;

        - 主动释放对象引用用 null。