空值合并操作符(??)是一個邏輯操作符,當左側的操作數為 null 或者 undefined 時,傳回其右側操作數,否則傳回左側操作數。
設定預設值
通常我們在設定預設值的時候會用 || 在左值為ture的情況下沒問題
let a = 2
let sex = a || 1
// sex = 2
由于 || 是一個布爾邏輯運算符,左側的操作數會被強制轉換成布爾值用于求值。任何假值(0, ‘’, NaN, null, undefined)都不會被傳回。這導緻如果你使用0,’'或NaN作為有效值,就會出現不可預料的後果。
let a = 0
let sex = a || 1
// sex = 1
如果是用
let a = 0
let sex = a ?? 1
// sex = 0
短路操作
function A() { console.log('函數 A 被調用了'); return undefined; }
function B() { console.log('函數 B 被調用了'); return fasle; }
function C() { console.log('函數 C 被調用了'); return 'c'; }
console.log( A() ?? C() );
// 依次列印 "函數 A 被調用了"、"函數 C 被調用了"、"foo"
// A() 傳回了 undefined,是以操作符兩邊的表達式都被執行了
console.log( B() ?? C() );
// 依次列印 "函數 B 被調用了"、"false"
// B() 傳回了 false(既不是 null 也不是 undefined)
// 是以右側表達式沒有被執行