在JavaScript中,处理变量的空值(null 或 undefined)是一个常见的需求。为了更优雅地处理这种情况,ES2020 引入了空值合并运算符(Nullish Coalescing Operator),即 ??。
??) 的作用?? 运算符用于检查左侧的表达式是否为 null 或 undefined。如果是,则返回右侧的值;否则,返回左侧的值。
const result = leftExpression ?? rightExpression;
leftExpression:需要检查的表达式。rightExpression:当 leftExpression 为 null 或 undefined 时返回的值。const foo = null;
const bar = foo ?? 'default value';
console.log(bar); // 输出: 'default value'
const baz = 0;
const qux = baz ?? 'default value';
console.log(qux); // 输出: 0
||) 的区别?? 与 || 运算符不同,|| 会检查左侧表达式是否为假值(如 false、0、''、NaN、null、undefined),而 ?? 仅检查 null 和 undefined。
const value = 0;
const result1 = value || 'default';
console.log(result1); // 输出: 'default'
const result2 = value ?? 'default';
console.log(result2); // 输出: 0
默认值赋值:
const user = {
name: 'Alice',
age: null
};
const age = user.age ?? 18;
console.log(age); // 输出: 18
函数参数默认值:
function greet(name) {
name = name ?? 'Guest';
console.log(`Hello, ${name}!`);
}
greet(); // 输出: Hello, Guest!
greet(null); // 输出: Hello, Guest!
greet('Alice'); // 输出: Hello, Alice!
链式操作:
const user = {
profile: {
name: 'Bob',
age: null
}
};
const age = user.profile.age ?? 25;
console.log(age); // 输出: 25
?? 仅对 null 和 undefined 起作用,其他假值(如 0、''、false)不会被替换。?? 不能与 && 或 || 直接混用,除非使用括号明确优先级。const a = null;
const b = 0;
const c = a ?? b || 'default'; // 报错: SyntaxError
const d = (a ?? b) || 'default'; // 正确
console.log(d); // 输出: 0
空值合并运算符 ?? 提供了一种简洁且安全的方式来处理 null 和 undefined 的情况,避免了使用 || 时可能导致的意外行为。在处理变量空值时,?? 是一个非常实用的工具。