📜  javascript 双问号 - Javascript (1)

📅  最后修改于: 2023-12-03 15:01:42.010000             🧑  作者: Mango

JavaScript 双问号

在 JavaScript 中,我们可以使用双问号(??)运算符来判断一个变量是否为 null 或者 undefined。该运算符在 ECMAScript 2020 中添加,因此在老版本的 JavaScript 中可能无法使用。

使用方式
const num = 0;
const str = '';
const bool = false;
const nul = null;
const und = undefined;

console.log(num ?? 1); // 0
console.log(str ?? 'default'); // ''
console.log(bool ?? true); // false
console.log(nul ?? 'not null'); // 'not null'
console.log(und ?? 'not undefined'); // 'not undefined'

上述代码中,?? 运算符会先判断左侧变量是否为 null 或 undefined,如果不是则返回左侧变量,如果是则返回右侧的默认值。

注意,如果左侧变量为 0、空字符串、false 或者空数组等 Falsy 值,仍然会返回左侧变量。

特性
  • ?? 运算符的优先级低于大部分运算符,包括算术运算符、比较运算符和逻辑运算符,但是高于赋值运算符 =

  • 在链式操作中,?? 运算符是优先级最低的,它优先级甚至比 . 运算符还低。

const obj = { a: { b: 2 } };
const val = null;

console.log(obj?.a?.b ?? 'not found'); // 2
console.log(val?.a?.b ?? 'not found'); // 'not found'
  • ?? 运算符不会进行类型转换,如果左侧变量为一个空字符串或数字 0,也会认为其不为 null 或 undefined。
console.log('' ?? 'not null'); // ''
console.log(0 ?? 'not null'); // 0
总结
  • ?? 运算符可以用于判断变量是否为 null 或 undefined,返回默认值。

  • ?? 运算符可以在链式操作中防止因为某个路径上的变量为 null 或 undefined 而导致程序崩溃。

  • ?? 运算符不会进行类型转换,对于空字符串、数字 0 以及 Falsy 值需要特别考虑。