undefined 与 ReferenceError 的区别

JavaScript 中 undefined 和 ReferenceError 的本质区别

问题

JavaScript 中的 undefinedReferenceError: xxx is not defined 有什么区别?

解答

ReferenceError

当尝试访问一个不存在的变量时,JavaScript 会抛出 ReferenceError。这表示该变量从未被声明过。

console.log(foo); // ReferenceError: foo is not defined

undefined

undefined 是 JavaScript 的一个基本数据类型,表示变量已声明但未赋值。

let bar;
console.log(bar); // undefined

let obj = {};
console.log(obj.name); // undefined

function test() {}
console.log(test()); // undefined

对比示例

// 未声明的变量
console.log(a); // ReferenceError: a is not defined

// 已声明但未赋值
let b;
console.log(b); // undefined

// 对象不存在的属性
let obj = { x: 1 };
console.log(obj.y); // undefined

关键点

  • ReferenceError 是错误,表示变量未声明,会中断代码执行
  • undefined 是值,表示变量已声明但未赋值
  • 访问对象不存在的属性返回 undefined,不会抛出错误
  • 函数没有返回值时,默认返回 undefined