JavaScript中undefined与not defined的区别详解
本文通过具体测试案例解析JavaScript中undefined与not defined的区别。未声明变量访问会触发ReferenceError(not defined),而已声明但未赋值的变量或对象缺失属性返回undefined。文章还探讨了typeof行为、逻辑或运算及条件判断中的表现,帮助开发者准确区分这两种状态。
undefined与not defined的核心区别
经过研究,JavaScript中的undefined和not defined存在显著差异。从语义角度分析,两者含义不同,具体区别如下文所述。
测试环境:操作系统为ubuntu。
测试浏览器:Chrome。
测试案例与现象分析
测试案例1:
console.log(a)
报错 ReferenceError: a is not defined
测试案例2:
var a
console.log(a)
无报错,但是输出undefined
测试案例2:
var b = {};
console.log(b.a)
无报错,但是输出undefined
测试案例3:
function c() {
}
var d = new c();
console.log(d.a)
无报错,但是显示undefined
typeof与逻辑运算表现
关于typeof:
以上所有用于测试的对象,使用typeof返回的结果均为String("undefined")。
关于或运算 ||:
var d = a||3
报错 a not defined
var a;
var d = a || 3
结果:d==3
var c = 22 || 44
c==22
var c = false || 33
c == 33
if(x) {
}
报错
var x
if(x) {
}
if内不执行
总结与语义辨析
总结:
JavaScript中存在两种undefined状态,虽然使用typeof返回的都是String("undefined")。
第一种是变量已定义但未进行任何操作,或者是某个对象中不存在的属性。这类undefined可以参与运算,适用于逻辑运算场景。
第二种是变量完全未定义且没有任何上下文背景(例如x.a,虽然对象x没有a属性,但对象x本身存在)。这类属于报错类型,不能被直接使用,除非通过typeof函数进行检查。
JavaScript中的或运算(||)并不返回布尔值,而是返回最后一个被计算的值。例如 1||2,因为1为真,2无需计算,所以 1||2 == 1;而 a||1 会报错。
var a; a|| 1 == 1;
查阅相关辞典翻译如下:
undefined可以翻译为:不明确的,即不知道用来做什么。
而 not defined 可以翻译为:未定义的。
D3.js 比例尺与坐标轴的配置详解
2026-11-05 16:54:46
JavaScript怎么遍历对象的Symbol键和不可枚举属性
2026-11-05 13:13:39
封装一个健壮的JS字符串判空工具函数
2026-11-05 12:16:14
JavaScript合并数组的三种常用方法:concat、扩展运算符与push
2026-11-05 11:22:29
JavaScript立即执行函数(IIFE)是什么及基本语法
2026-11-05 10:51:19
