在 JavaScript 中,有一个特殊值称为 undefined,其含义简洁明了:表示“尚未被赋予具体意义”的原始状态。它既不是错误,也不是空对象,而是由 JavaScript 引擎内置、被动生成的“无值”标识。简单来说,当引擎遇到本应有值却缺失的情况时,不会抛出错误,而是返回这个标记。

JavaScript 中 Undefined 类型 的底层含义,即表示一个值处于“尚未被赋予意义”的状态。它并非错误,也非空对象,而是语言内置的、被动产生的无值标识。
它代表变量声明后的默认初始状态
当你用 let、const 或 var 声明一个变量但未为其赋值时,JavaScript 引擎会自动将该变量设为 undefined。这一行为并非由开发者主动编写,而是引擎默认执行的“占位”操作。
let name;→name变量的值即为undefinedconst age;(语法错误,因为const必须初始化)→ 这反过来说明undefined是留给那些可以延迟初始化的变量的占位符- 这种状态不由开发者主动设置,而是语言运行时的自然结果
它出现在多种“缺失但合法”的场景中
undefined 并非仅出现在未赋值的变量中。只要 JavaScript 遇到“本应有值但当前未提供”的情况,就会返回 undefined,而不会报错——这是语言设计上的宽容处理。以下是一些常见触发场景:
- 函数没有写
return语句,执行完毕后默认返回undefined - 调用函数时传入参数数量不足,缺少的参数值为
undefined - 读取对象上不存在的属性,例如
obj.missing得到undefined - 访问数组的越界索引,例如
[1,2][5]得到undefined
它和未声明变量有本质区别
许多开发者容易混淆 undefined 与 ReferenceError。核心区别在于变量是否已被声明。
let a;然后console.log(a)输出undefined(已声明但未赋值)console.log(b)则抛出ReferenceError: b is not defined(变量未声明)- 值得注意的是:
typeof b仍然返回"undefined",这是唯一能够安全检测未声明变量的方法
它是原始类型,只包含一个值
undefined 是 JavaScript 的七种原始类型之一(String、Number、Boolean、Undefined、Null、Symbol、BigInt),其值就是 undefined,大小写敏感,且无法被构造或继承。
typeof undefined返回"undefined"undefined === undefined结果为truevoid 0和void(123)等表达式同样返回undefined,常用于防止全局undefined被意外覆盖(ES5+ 已将其定为只读,但旧代码仍需谨慎)
