res = a ?? b
// 等价于
ers = a !== null && a !== undefined ? a : b
??
运算符的优先级等同于||
,低于&&
。
出于安全原因,JavaScript 不允许在 ??
左侧使用 &&
或者 ||
运算符,因为这样会导致一些不明确的行为。可以使用括号明确指定优先级。
下边代码会触发一个语法错误:
let a = 1 && 2 ?? 3 // SyntaxError
let a = (1 && 2) ?? 3 // 2