在日常 JavaScript 开发中,我们经常会遇到 判空处理、链式调用、默认值设置 等场景。传统写法往往需要嵌套冗余的逻辑,不仅繁琐,还容易出错。
ES2020 及之后的版本引入了一些新特性,如 空值合并运算符 (??
) 和 可选链运算符 (?.
),极大地提升了代码的可读性与执行效率。本文将带你梳理这些现代工具的用法和应用场景。
??
)在给变量设置默认值时,过去常用 逻辑或运算符 (||
):
const input = "";
const result = input || "默认值";
console.log(result); // "默认值"
这里有一个问题:空字符串 ""
、数字 0
、布尔值 false
都会被当作 假值,从而错误地触发默认值。
??
的改进??
只在 值为 null
或 undefined
时才会使用默认值。
const input = "";
const result = input ?? "默认值";
console.log(result); // ""
这样我们就能避免误判,确保只有在真正的“缺失值”时才使用默认值。
✅ 应用场景
""
和 undefined
。0
或 false
。?.
)假设我们有一个嵌套对象:
const user = {
profile: {
address: {
city: "Shanghai"
}
}
};
若要安全获取 user.profile.address.city
,传统写法往往需要层层判断:
const city = user && user.profile && user.profile.address && user.profile.address.city;
这种写法不仅冗长,还极容易出错。
?.
的简化可选链运算符让代码更简洁:
const city = user?.profile?.address?.city;
console.log(city); // "Shanghai"
如果某一层级不存在,表达式会立即返回 undefined
,而不会抛出错误。
✅ 应用场景
null
或 undefined
引发的运行时错误。??
与 ?.
的组合使用很多时候,这两个运算符可以一起使用:
const config = {
api: {
retryCount: 0
}
};
const retry = config?.api?.retryCount ?? 3;
console.log(retry); // 0
在这个例子中:
?.
保证访问安全,不会报错。??
确保在 retryCount
缺失时,使用默认值 3
,但不会误判 0
。除了 ??
和 ?.
,现代 JavaScript 还提供了许多高效特性:
??=
)如果变量为 null
或 undefined
,才进行赋值:
let count;
count ??= 10;
console.log(count); // 10
?.()
)安全调用可能不存在的方法:
const handler = config?.onClick?.();
?.[]
)当属性名动态变化时依旧安全:
const value = user?.settings?.["theme"];
现代 JavaScript 的新特性极大提升了代码的 安全性 与 可读性:
??
—— 精准控制默认值,仅在 null
/undefined
时触发。?.
—— 优雅地处理深层对象访问,避免冗长判断。??=
、?.()
、?.[]
—— 进一步扩展场景,提升开发体验。在实际项目中,合理使用这些语法糖,可以让代码更简洁、更健壮,从而显著提升开发效率。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。