欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ES2020系列之空值合并運算符 '??'

 更新時間:2020年07月22日 11:00:59   作者:LeviDing  
這篇文章主要介紹了ES2020系列之空值合并運算符 '??',文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

空值合并運算符 ?? 提供了一種簡短的語法,用來獲取列表中第一個“已定義”的變量(譯注:即值不是 null 或 undefined 的變量)。

a ?? b 的結果是:

  • a,如果 a 不是 null 或 undefined,
  • b,其他情況。

所以,x = a ?? b 是下面這個表達式的簡寫:

x = (a !== null && a !== undefined) ? a : b;

下面是一個更長一點的例子。

假設,我們有一個用戶,變量 firstName、lastName 和 nickName 分別對應用戶的名字、姓氏和昵稱。如果用戶決定不輸入任何值,那么這些變量都可能是未定義的。

我們想要顯示用戶的名稱:顯示這三個變量中的一個,如果都沒有設置值,則顯示 "Anonymous"。
讓我們使用 ?? 運算符選擇第一個已定義的變量:

let firstName = null;
let lastName = null;
let nickName = "Supercoder";

// 顯示第一個不是 null/undefined 的值
alert(firstName ?? lastName ?? nickName ?? "Anonymous"); // Supercoder

與 || 比較

或運算符 || 可以與 ?? 運算符以同樣的方式使用。正如 上一章 所講的,我們可以用 || 替換上面示例中的 ??,也可以獲得相同的結果。

重要的區(qū)別是:

  • || 返回第一個 真 值。
  • ?? 返回第一個 已定義的 值。

當我們想將 null/undefined 與 0 區(qū)別對待時,這個區(qū)別至關重要。

例如,考慮下面這種情況:

height = height ?? 100;

如果 height 未定義,則將其賦值為 100。

讓我們將其與 || 進行比較:

let height = 0;

alert(height || 100); // 100
alert(height ?? 100); // 0

在這個例子中,height || 100 將值為 0 的 height 視為未設置的(unset),與 null、undefined 以及任何其他假(falsy)值同等對待。因此得到的結果是 100。

height ?? 100 僅當 height 確實是 null 或 undefined 時才返回 100。因此,alert 按原樣顯示了 height 值 0。

哪種行為更好取決于特定的使用場景。當高度 0 為有效值時,?? 運算符更適合。

優(yōu)先級

?? 運算符的優(yōu)先級相當?shù)停涸?MDN table 中為 5。

因此,?? 在大多數(shù)其他運算之后,但在 = 和 ? 之前進行運算。

如果我們需要在復雜表達式中使用 ?? 進行取值,需要考慮加括號:

let height = null;
let width = null;

// 重要:使用括號
let area = (height ?? 100) * (width ?? 50);

alert(area); // 5000

否則,如果我們省略了括號,* 的優(yōu)先級比 ?? 高,會優(yōu)先執(zhí)行。

運算過程將等同于下面這個表達式:

// 可能不正確的
let area = height ?? (100 * width) ?? 50;

這里還有一個相關的語言級別的限制。

出于安全原因,禁止將 ?? 運算符與 && 和 || 運算符一起使用。

下面的代碼會觸發(fā)一個語法錯誤:

let x = 1 && 2 ?? 3; // Syntax error

這個限制無疑是值得商榷的,但是它被添加到語言規(guī)范中是為了避免編程錯誤,因為人們開始使用 ?? 替代 ||。

可以明確地使用括號來解決這個問題:

let x = (1 && 2) ?? 3; // 起作用

alert(x); // 2

總結

空值合并運算符 ?? 提供了一種簡潔的方式獲取列表中“已定義”的值。

它被用于為變量分配默認值:

// 當 height 的值為 null 或 undefined 時,將 height 的值設置為 100
height = height ?? 100;

?? 運算符的優(yōu)先級非常低,只略高于 ? 和 =。

如果沒有明確添加括號,不能將其與 || 或 && 一起使用。

到此這篇關于ES2020系列之空值合并運算符 '??'的文章就介紹到這了,更多相關ES2020 空值合并運算符 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 頁面使用密碼保護代碼

    頁面使用密碼保護代碼

    這是一個由JS實現(xiàn)的網(wǎng)頁密碼保護代碼,在進入網(wǎng)頁前需要在彈出框中輸入密碼才可以,不過現(xiàn)在不怎么用了,一般情況下,目前都在后臺處理這種功能,用戶輸入用戶名和密碼后交給服務器處理,然后再返回信息,若登錄無誤就可看到某些內(nèi)容
    2013-04-04
  • JavaScript中的排序算法代碼

    JavaScript中的排序算法代碼

    排序算法的理解算是程序員的基本功之一了,其功能是對一個數(shù)據(jù)元素集合或序列重新排列成一個按數(shù)據(jù)元素某個項值有序的序列。
    2011-02-02
  • JavaScript沙箱隔離示例代碼

    JavaScript沙箱隔離示例代碼

    沙箱隔離(Sandbox Isolation)是微前端架構中的核心技術,用于確保多個子應用在同一頁面中運行時,資源(JS/CSS/環(huán)境變量)相互隔離,避免沖突,這篇文章主要介紹了JavaScript沙箱隔離的相關資料,需要的朋友可以參考下
    2025-07-07
  • JS實現(xiàn)加載時鎖定HTML頁面元素的方法

    JS實現(xiàn)加載時鎖定HTML頁面元素的方法

    這篇文章主要介紹了JS實現(xiàn)加載時鎖定HTML頁面元素的方法,涉及javascript針對頁面元素的遍歷與屬性操作相關實現(xiàn)技巧,需要的朋友可以參考下
    2017-06-06
  • JS控制div跳轉到指定的位置的幾種解決方案總結

    JS控制div跳轉到指定的位置的幾種解決方案總結

    這篇文章主要介紹了JS控制div跳轉到指定的位置的幾種解決方案總結,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。
    2016-11-11
  • js實現(xiàn)購物車計算的方法

    js實現(xiàn)購物車計算的方法

    這篇文章主要為大家詳細介紹了js實現(xiàn)購物車的計算方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 使用js獲取圖片原始尺寸

    使用js獲取圖片原始尺寸

    本文給大家推薦的是一個使用js獲取圖片的原始尺寸的例子,從本人項目中摳出來的,這里奉獻給大家,有需要的直接拿走。
    2014-12-12
  • js實現(xiàn)將選中內(nèi)容分享到新浪或騰訊微博

    js實現(xiàn)將選中內(nèi)容分享到新浪或騰訊微博

    這篇文章主要介紹了js實現(xiàn)將選中內(nèi)容分享到新浪或騰訊微博,需要的朋友可以參考下
    2015-12-12
  • mint-ui的search組件在鍵盤顯示搜索按鈕的實現(xiàn)方法

    mint-ui的search組件在鍵盤顯示搜索按鈕的實現(xiàn)方法

    這篇文章主要介紹了mint-ui的search組件在鍵盤顯示搜索按鈕的實現(xiàn)方法,需要的朋友可以參考下
    2017-10-10
  • 給事件響應函數(shù)傳參數(shù)的四種方式小結

    給事件響應函數(shù)傳參數(shù)的四種方式小結

    這篇文章主要介紹了給事件響應函數(shù)傳參數(shù)的四種方式。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12

最新評論