JavaScript / TypeScript 中 `null` 与 `undefined` 使用规范

一、目的

为了提升代码一致性、可读性和可维护性,统一团队中 nullundefined 的使用场景与规则,避免混乱与隐患。

二、概念区分

类型 含义 说明
undefined 系统默认的"未赋值"状态 通常由 JavaScript 引擎自动赋值
null 明确表示"空"或"无值" 由程序员主动赋值,表达"空"或"无效"状态

三、使用规范

1. 变量初始化

  • 使用 null 初始化非基本类型变量(对象、数组、引用):

    ini 复制代码
    let user: User | null = null;
    let items: Item[] | null = null;
  • 禁止手动将变量赋为 undefined,未初始化变量默认为 undefined 即可。

2. 对象属性缺省/清空

  • 对象属性可初始化为 null,表示"暂时为空":

    csharp 复制代码
    interface Profile {
      avatarUrl: string | null;
    }
  • 禁止将对象属性赋为 undefined,使用 null 代替。

3. 函数参数与返回值

  • 返回值为空时建议返回 null,避免使用 undefined

    bash 复制代码
    function findUser(id: number): User | null {
      return users[id] ?? null;
    }
  • 函数可选参数应使用 ? 来声明,而非 | undefined

    php 复制代码
    function greet(name?: string) {
      const realName = name ?? 'Guest';
    }

4. 判断空值

  • 判断变量是否为"空"时,使用宽松等于 == null

    ini 复制代码
    if (value == null) {
      // 相当于 value === null || value === undefined
    }
  • 避免使用 typeof value === 'undefined',除非在处理全局变量或 window 属性。

5. 清除引用(优化垃圾回收)

  • 使用 null 显式清除引用,有助于垃圾回收:

    ini 复制代码
    largeObject = null;
  • 不推荐使用 delete obj.prop,可使用 obj.prop = null

四、禁止示例

以下写法不符合规范:

ini 复制代码
// 不推荐
let data = undefined;
obj.value = undefined;
return undefined;

// 推荐
let data: SomeType | null = null;
obj.value = null;
return null;

五、TypeScript 类型声明建议

  • 对于可能缺省的变量或返回值,使用 | null 明确标注:

    csharp 复制代码
    let token: string | null = null;
  • 函数参数若为可选项,应使用 ? 而非 | undefined

    bash 复制代码
    function load(id?: number) { ... }

六、配套 ESLint 规则建议(可选)

perl 复制代码
{
  "rules": {
    "no-undefined": "error", // 禁止手动使用 undefined
    "@typescript-eslint/strict-boolean-expressions": "warn",
    "@typescript-eslint/no-unnecessary-condition": "warn"
  }
}

七、总结原则

  • 程序员主动赋值请使用 null
  • 系统默认缺省状态使用 undefined,无需手动赋值。
  • 清除对象引用时使用 null,有助于垃圾回收。
  • 判断空值时使用 == null,可同时判断 nullundefined
  • 类型声明中建议优先使用 | null,参数可选用 ?
相关推荐
A_nanda25 分钟前
根据AI提示排查vue前端项目
前端·javascript·vue.js
happymaker06261 小时前
web前端学习日记——DAY05(定位、浮动、视频音频播放)
前端·学习·音视频
~无忧花开~1 小时前
React状态管理完全指南
开发语言·前端·javascript·react.js·前端框架
LegendNoTitle1 小时前
计算机三级等级考试 网络技术 选择题考点详细梳理
服务器·前端·经验分享·笔记·php
@大迁世界2 小时前
1.什么是 ReactJS?
前端·javascript·react.js·前端框架·ecmascript
BJ-Giser2 小时前
Cesium 基于EZ-Tree的植被效果
前端·可视化·cesium
王码码20353 小时前
Flutter for OpenHarmony:Flutter 三方库 algoliasearch 毫秒级云端搜索体验(云原生搜索引擎)
android·前端·git·flutter·搜索引擎·云原生·harmonyos
发现一只大呆瓜3 小时前
深入浅出 AST:解密 Vite、Babel编译的底层“黑盒”
前端·面试·vite
天天鸭4 小时前
前端仔写了个 AI Agent,才发现大模型只干了 10% 的活
前端·python·ai编程
发现一只大呆瓜4 小时前
前端模块化:CommonJS、AMD、ES Module三大规范全解析
前端·面试·vite