当前位置: 首页 > news >正文

undefined和null的区别 (新手小白级教程)

undefined和null的区别 (新手小白级教程)

undefinednull 都表示“没有值”,但它们的核心区别在于:

  • undefined 是 JavaScript 自动分配的默认值,表示“未定义”,没有原始值;或者说是没有值这么一个东西。换句话说就是:这个地方应该是有一个值的,而你没有去定义,但你又去读取它,这个时候就会返回undefined。
  • null 是开发者主动赋值的空值,表示“空对象引用” (即:一个对象被定义了值为空值)。

一、定义与核心区别

维度undefinednull
来源系统自动赋予(默认值)开发者手动赋值
语义“这里应该有值,但还没定义”“这里应该是一个对象,但现在是空的”
类型typeof undefined"undefined"typeof null"object"(历史遗留问题)

二、常见场景与示例

1. undefined 的产生场景
  • 变量未赋值

    let name;
    console.log(name); // undefined
    
  • 函数无返回值

    function sayHello() {}
    console.log(sayHello()); // undefined
    
  • 对象属性未定义

    const obj = {};
    console.log(obj.age); // undefined
    
  • 函数参数未传递

    function greet(name) {
      console.log(name); // 未传参时,name → undefined
    }
    greet();
    

2. null 的产生场景
  • 主动清空对象引用

    let data = { id: 1 };
    data = null; // 释放内存,表示data不再指向任何对象
    
  • 初始化空值占位

    let user = null; // 稍后从服务器获取数据再赋值
    
  • DOM获取不存在的元素

    const element = document.getElementById("no-such-id");
    console.log(element); // null
    

三、类型检测与比较

1. 类型检测
console.log(typeof undefined); // "undefined"  
console.log(typeof null);      // "object"(历史遗留问题,实际应为"null")
2. 相等性比较
  • ==(宽松相等)
    console.log(null == undefined); // true(规范约定)
    
  • ===(严格相等)
    console.log(null === undefined); // false(类型不同)
    

四、使用建议与避坑指南

1. 使用原则
  • undefined:表示“系统默认的未定义状态”,不要手动赋值
  • null:表示“开发者主动设置的明确空值”。
2. 常见误区
  • typeof null 的陷阱

    // 检测null的正确方式
    const isNull = (value) => value === null;
    
  • JSON序列化的差异

    JSON.stringify({ a: undefined, b: null }); 
    // 结果:'{"b":null}'(undefined被忽略,null保留)
    

五、总结记忆口诀

“系统未定义用 undefined,主动清空用 null

  • undefined:系统自动填,变量未赋默认值。
  • null:开发者主动设,空对象引用要牢记。

通过理解它们的来源和设计意图,我们可以避免混淆,写出更清晰的代码!

相关文章:

  • 第5关:猴子爬山
  • 航空动力系统适航标准要点手册
  • OpenRewrite配方之import语句的顺序——org.openrewrite.java.OrderImports
  • transformer bert 多头自注意力
  • element-plus中Autocomplete自动补全输入框组件的使用
  • 【Spring】详细剖析Spring程序
  • 多线程实现批量保存数据
  • PE,ELF,COFF
  • 基于物联网设计的疫苗冷链物流监测系统
  • 【前端知识】前端构建工具webpack的平替vite
  • 【软件测试】--面试
  • 如何用终端运行一个SpringBoot项目
  • SD ComfyUI工作流 一键Q版盲盒手办形象_多关键词切换
  • 星越L_副驾驶屏使用讲解
  • 每日一题之储存晶体
  • 基于GoogleNet深度学习网络和GEI步态能量提取的步态识别算法matlab仿真,数据库采用CASIA库
  • Linux驱动开发实战(四):设备树点RGB灯
  • Cursor 终极使用指南:从零开始走向AI编程
  • 【算法题解答·六】栈队列堆
  • 剑指 Offer II 073. 狒狒吃香蕉
  • 网站靠什么/制作网站建设入门
  • 做游戏模型挣钱的网站/宁波seo推广如何收费
  • 东莞 网站 建设 雕塑/网站搭建平台都有哪些
  • 无锡网站建设企业排名/上海推广外包
  • 昌乐网站建设/友情链接作用
  • 房产网站系统源码/b站推广