JavaScript兩個問號(??)是ECMAScript 2020標(biāo)準(zhǔn)引入的新特性,它是JavaScript中的一種新的nullish合并運(yùn)算符,用于合并null或undefined的情況。在本文中,我們將深入探討這個新特性,為何它有用,并且如何在我們的代碼中使用它。
在過去的JavaScript中,使用邏輯或運(yùn)算符(||)來合并兩個數(shù)或兩個變量,在某些情況下會相當(dāng)有用,例如:
let name = ""; let firstName = name || "John"; console.log(firstName); // 輸出"John"
在上面的代碼中,由于name的值是一個空字符串,邏輯或運(yùn)算符會被解釋為false,并且JavaScript會為firstName賦一個默認(rèn)值(在這種情況下是"John")。但是,如果name的值為0,則邏輯或運(yùn)算符會被解釋為true,會導(dǎo)致firstName使用不正確的默認(rèn)值。
這是區(qū)別于JavaScript兩個問號運(yùn)算符(??)的地方,JavaScript兩個問號運(yùn)算符會檢查一個變量的值是否為null或undefined。它只有在變量值為null或undefined時才會返回默認(rèn)值,否則返回變量的實(shí)際值。例如:
let name = ""; let firstName = name ?? "John"; console.log(firstName); // 輸出""
在這個示例中,由于name的值是一個空字符串,并且不是null或undefined,因此JavaScript兩個問號運(yùn)算符將返回空字符串本身,而不是默認(rèn)值"John"。
兩個問號運(yùn)算符還可以將多個變量鏈接在一起,如果第一個變量的值是null或undefined,它會檢查下一個變量,以此類推,直到找到一個不是null或undefined的變量值。例如:
let name = null; let firstName = name ?? undefined ?? "" ?? "John"; console.log(firstName); // 輸出"John"
在上述示例中,JavaScript兩個問號運(yùn)算符按順序檢查了每個變量,發(fā)現(xiàn)所有變量都為null或undefined,并返回默認(rèn)值"John"。
綜上所述,JavaScript兩個問號運(yùn)算符是一種新的合并運(yùn)算符,可用于合并null或undefined的情況。它提供了比邏輯或運(yùn)算符更精確的默認(rèn)值設(shè)置,并能簡化代碼的編寫。在任何情況下,都應(yīng)該優(yōu)先使用JavaScript兩個問號運(yùn)算符而不是邏輯或運(yùn)算符。