js中??是什么意思(示例场景)

在 JavaScript 中,?? 是一个逻辑运算符,称为 空值合并运算符(Nullish Coalescing Operator)。它用于检查左侧的值是否为 null 或 undefined,如果是,则返回右侧的值;否则返回左侧的值。

语法

leftExpr ?? rightExpr
  • leftExpr: 左侧的表达式。
  • rightExpr: 右侧的表达式。

行为

  • 如果 leftExpr 是 null 或 undefined,则返回 rightExpr
  • 如果 leftExpr 不是 null 或 undefined,则返回 leftExpr

示例

const value1 = null;
const value2 = undefined;
const value3 = 0;
const value4 = '';
const value5 = 'Hello';
console.log(value1 ?? 'default'); // 输出: 'default'(因为 value1 是 null)
console.log(value2 ?? 'default'); // 输出: 'default'(因为 value2 是 undefined)
console.log(value3 ?? 'default'); // 输出: 0(因为 value3 不是 null 或 undefined)
console.log(value4 ?? 'default'); // 输出: ''(因为 value4 不是 null 或 undefined)
console.log(value5 ?? 'default'); // 输出: 'Hello'(因为 value5 不是 null 或 undefined)

与 || 的区别

?? 和 || 都可以用于提供默认值,但它们的行为有所不同:

  • || 会在左侧值为 假值(falsy)时返回右侧值。假值包括:false0''nullundefinedNaN
  • ?? 只会在左侧值为 null 或 undefined 时返回右侧值。

示例对比

const value1 = 0;
const value2 = '';
console.log(value1 || 'default'); // 输出: 'default'(因为 0 是假值)
console.log(value1 ?? 'default'); // 输出: 0(因为 0 不是 null 或 undefined)
console.log(value2 || 'default'); // 输出: 'default'(因为 '' 是假值)
console.log(value2 ?? 'default'); // 输出: ''(因为 '' 不是 null 或 undefined)

使用场景

  • 提供默认值: 当你希望仅在值为 null 或 undefined 时使用默认值,而不是其他假值(如 0 或 '')。
  • 避免意外行为: 当你需要区分 null/undefined 和其他假值时。

示例场景

function greet(name) {
  const displayName = name ?? 'Guest';
  console.log(`Hello, ${displayName}!`);
}
greet(null);      // 输出: Hello, Guest!
greet(undefined); // 输出: Hello, Guest!
greet('Alice');   // 输出: Hello, Alice!
greet('');        // 输出: Hello, !(空字符串不是 null 或 undefined)

注意事项

  • ?? 的优先级较低,因此在复杂表达式中可能需要使用括号来明确运算顺序。
  • ?? 不能直接与 && 或 || 混合使用,除非用括号明确优先级,否则会抛出语法错误。
// 错误示例
const result = a && b ?? c; // 语法错误
// 正确示例
const result = (a && b) ?? c;

总结

?? 是一个非常有用的运算符,特别适合在需要区分 null/undefined 和其他假值的场景中使用。它可以帮助你更精确地处理默认值逻辑。

到此这篇关于js中??是什么意思的文章就介绍到这了,更多相关js中??内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源链接:https://www.jb51.net/javascript/339356zzh.htm

© 版权声明
THE END
支持一下吧
点赞7 分享
评论 抢沙发
头像
请文明发言!
提交
头像

昵称

取消
昵称表情代码快捷回复

    暂无评论内容