最稳妥的判断方式是 typeof myvar === 'undefined',它不会因变量未声明而抛错,能安全区分“未声明”和“已声明但值为 undefined”;直接用 === undefined 会触发 referenceerror。

最稳妥的方式是用 typeof 判断,它不会因变量未声明而抛错,能安全区分“未声明”和“已声明但值为 undefined”两种情况。
为什么不能直接用 === undefined
因为如果变量根本没声明(比如 myVar 从未出现过),直接写 myVar === undefined 会触发 ReferenceError,脚本立刻中断。而 typeof myVar === 'undefined' 即使 myVar 完全不存在,也只会返回 true 或 false,不报错。
推荐的检测写法
-
通用安全写法:
typeof myVar === 'undefined'—— 适用于所有场景,包括未声明、已声明未赋值、显式赋值为undefined -
检查全局变量是否存在:
'myVar' in window—— 只判断是否在全局作用域中被声明过,不管值是什么 -
避免误判 falsy 值:不要用
if (!myVar),它会把0、''、false、null都当成“未定义”
常见误用与对比
下面这些写法都有风险:
-
myVar == undefined或myVar === undefined:未声明时直接报错 -
myVar == null:会同时匹配null和undefined,语义不精确 -
if (myVar):把所有 falsy 值都当“不存在”,逻辑容易出错 -
void 0虽然安全(myVar === void 0),但可读性差,没必要替代typeof
实际应用建议
- 函数参数默认值:用
typeof param === 'undefined'判断是否传参,再决定是否用默认值 - 配置对象取值前:先确认
typeof config !== 'undefined',再访问config.timeout - 动态变量名(如拼接字符串):必须用
typeof,不能用点号或方括号直接访问
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











