最安全可靠的方式是用===判断undefined或typeof检查类型;推荐===undefined适用于已声明变量,typeof'undefined'可安全检测未声明变量,ES6+可用?.和??处理嵌套属性与空值。

最安全可靠的方式是用 严格相等(===)判断 undefined,或者用 typeof 检查类型,避免误判 null、0、false、空字符串等假值。
推荐:用 === undefined 明确判断
适用于已知变量名、且确定该变量可能未声明或显式赋值为 undefined 的场景:
- 如果变量已声明但未赋值,它的值就是
undefined,varName === undefined返回true - 注意:不能用
== undefined,因为null == undefined为true,会误触发默认值 - 示例:
const value = myVar === undefined ? 'default' : myVar;
更稳妥:用 typeof 避免引用错误
当变量可能根本未声明(即不存在)时,直接访问会报 ReferenceError。此时必须用 typeof:
-
typeof myVar === 'undefined'在变量未声明时也安全,不会报错 - 这是唯一能安全检测“未声明变量”的方式
- 示例:
const value = typeof myVar === 'undefined' ? 'default' : myVar;
ES6+ 更简洁:可选链 + 空值合并操作符(??)
适合处理对象属性、嵌套访问或函数返回值等场景:
-
??只在左侧为null或undefined时取右侧,默认值,不误判0、false等 - 搭配可选链
?.可安全读取深层属性:const name = user?.profile?.name ?? 'Anonymous'; - 注意:
??不替代||,后者在假值(如0、'')时也会触发默认值
不推荐:用 !variable 或 variable == null
这些写法逻辑宽松,容易掩盖真实意图:
-
!myVar会把0、false、''、null、undefined全当成“空”,不适合仅针对undefined设默认值 -
myVar == null虽能同时捕获null和undefined,但属于隐式转换,语义模糊,且无法区分两者 - 除非业务明确要求
null和undefined视为同一类“缺失值”,否则应避免
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











