undefined表示变量声明后未赋值的自然缺失,null表示程序员主动赋值的空值;判断存在性优先用== null,防崩溃用?.,补默认值用??,检测未声明变量必须用typeof。

判断一个值是否为 undefined,核心不是“避开它”,而是理解它何时自然出现,并用现代语法主动适配——这样写出来的代码更简洁、健壮、不易出错。
优先用 == null 统一判空
当业务逻辑只关心“值是否存在”(即是否为 null 或 undefined),value == null 是最简、最安全的写法。它由 ECMAScript 规范保证:只有 null 和 undefined 在抽象相等下互等,其他 falsy 值(如 0、false、"")都不会误匹配。
-
if (user.age == null)→ 正确捕获未设置或清空状态,不会把年龄为 0 的婴儿错判 - 避免
!value:它会把0、false、""全部过滤掉,语义不符
用可选链(?.)防崩溃式访问
深层属性访问是 undefined 最常引发报错的场景。传统写法 obj && obj.user && obj.user.profile 冗长且易漏。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
user?.profile?.city→ 任意一层为null或undefined,整个表达式返回undefined,不抛错 -
getData()?.map(...)→ 安全调用函数,避免TypeError: getData is not a function -
list?.[0]?.id→ 数组索引也支持,比list && list.length && list[0].id清晰得多
用空值合并(??)精准补默认值
?? 只在左侧为 null 或 undefined 时才取右侧,默认值不会被 0、false、"" 等合法假值覆盖。
立即学习“Java免费学习笔记(深入)”;
-
const count = response?.data?.count ?? 0→ 明确只补“真空”,保留零值统计意义 -
const theme = user.settings?.theme ?? 'light'→ 用户设了空字符串主题,仍按原意保留 - 别用
||替代:0 || 'default'得'default',但0 ?? 'default'得0
检测未声明变量必须用 typeof
直接访问未声明变量会触发 ReferenceError,而 typeof 是唯一能安全检测的方式。
-
if (typeof someUnknownVar === 'undefined')→ 即使变量根本没声明,也不报错 - 不要写
someUnknownVar === undefined:未声明时直接报错;且旧环境可能污染undefined全局变量 - 该技巧在动态模块加载、跨环境兼容判断中特别实用(比如检查
window.fetch是否存在)

















