JavaScript 空值合并运算符(??)

JavaScript 空值合并运算符(??

空值合并运算符 ?? 是 JavaScript 中的一种逻辑运算符,用于处理可能为 nullundefined 的值。它在 ES2020(ECMAScript 11)中引入,常用于提供默认值。


语法

let result = value1 ?? value2;
  • 如果 value1nullundefined,则返回 value2
  • 如果 value1 不是 nullundefined(包括 0falseNaN 等),则返回 value1

使用场景

1. 提供默认值

空值合并运算符最常见的用途是为可能未定义的值提供一个默认值。

let name = null;
let defaultName = name ?? 'Guest';

console.log(defaultName); // 输出: 'Guest'

如果 namenullundefined,返回 'Guest';否则返回 name


2. 区别于逻辑或运算符(||

|| 运算符会在遇到任何假值时返回右侧值,而 ?? 只对 nullundefined 生效。

let count = 0;

// 使用 || 运算符
let result1 = count || 10;
console.log(result1); // 输出: 10

// 使用 ?? 运算符
let result2 = count ?? 10;
console.log(result2); // 输出: 0

区别

  • ||0falseNaN 视为假值。
  • ?? 只把 nullundefined 视为“空值”。

3. 配合对象属性

当访问对象属性可能为 undefinednull 时,使用 ?? 提供默认值。

let user = {
  name: 'Alice',
  age: null
};

console.log(user.name ?? 'Anonymous'); // 输出: 'Alice'
console.log(user.age ?? 18);          // 输出: 18
console.log(user.gender ?? 'Unknown'); // 输出: 'Unknown'

4. 结合可选链操作符(?.

可选链操作符可以安全地访问嵌套属性,而空值合并运算符可以为其提供默认值。

let user = {
  profile: null
};

console.log(user?.profile?.name ?? 'Guest'); // 输出: 'Guest'

注意事项

1. 运算符优先级

空值合并运算符 ?? 的优先级低于大多数运算符,但高于赋值运算符 =

let a = null;
let b = 10;
let c = 20;

let result = a ?? b + c;
console.log(result); // 输出: 10,因为 b + c 在 ?? 之前计算
2. 与其他逻辑运算符一起使用

?? 与逻辑与运算符(&&)或逻辑或运算符(||)一起使用时,必须用括号明确运算顺序。

let a = null;
let b = 10;
let c = 20;

// 正确用法
let result = (a ?? b) || c;
console.log(result); // 输出: 10

// 错误示例
// let result = a ?? b || c; // 语法错误

浏览器支持

  • 空值合并运算符在 ES2020 中引入,现代浏览器(如 Chrome 80+、Firefox 74+、Safari 13.1+、Edge 80+)和 Node.js(14+)均已支持。
  • 如果需要支持旧版环境,可以使用 Babel 等工具进行转译。

总结

  • 空值合并运算符 ??|| 的更精确替代,专注于处理 nullundefined
  • 与可选链操作符 ?. 一起使用,可以极大简化对复杂对象结构的访问。
  • 使用时需要注意运算优先级和括号的明确表达。

它是处理默认值时的一种简洁而安全的解决方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值