typeof null 返回 "object",typeof undefined 才返回 "undefined";它可安全检测未声明变量,适用于判断变量是否未定义,但不能用于判空或区分 null。

在 JavaScript 基础学习中,typeof 是判断数据类型的常用操作符,但它对 undefined 和 null 的返回结果容易让人困惑:两者都返回 "undefined" 吗?不是——typeof null 实际返回 "object",而 typeof undefined 才是 "undefined"。所以“用 typeof 排除未定义”,核心其实是**准确识别变量是否为 undefined(而非 null 或其他假值)**。
明确 typeof 对 undefined 的判定结果
typeof 是唯一能安全检测未声明变量而不报错的操作符。它对以下情况返回 "undefined":
- 变量已声明但未赋值(
let a; typeof a === "undefined") - 变量根本未声明(
typeof undeclaredVar === "undefined",不会报错) - 函数无返回值时,默认返回
undefined(typeof someFunc() === "undefined")
注意:typeof null === "object" 是历史遗留 bug,不能靠它识别 null;若需区分 null 和 undefined,应额外用严格相等(===)判断。
排除 undefined 的典型写法
实际开发中,“排除未定义”常用于安全访问属性或执行逻辑。推荐组合使用 typeof 和逻辑判断:
- 检查变量是否存在且非
undefined:if (typeof myVar !== "undefined") { /* 安全使用 */ } - 检查对象属性是否定义(避免报错):
if (typeof obj?.prop !== "undefined")(配合可选链更稳妥) - 函数参数默认值兜底:
function fn(x) { x = typeof x !== "undefined" ? x : "default"; }(ES6 以后更推荐用默认参数fn(x = "default"))
常见误区与替代方案
别把 typeof 当万能“非空检查”:
-
typeof null === "object"→ 会误判为“已定义”,需单独处理:myVar === null || typeof myVar === "undefined" -
typeof "" === "string"、typeof 0 === "number"→ 它们虽是假值(falsy),但不是undefined,typeof不会返回"undefined" - 想同时排除
null、undefined、空字符串等?用更语义化的判断:myVar != null(宽松不等于,排除null和undefined)或myVar ?? "default"(空值合并运算符)
掌握 typeof 的边界和搭配方式,才能真正用它稳稳守住“未定义”这道关。不复杂但容易忽略细节。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











