97免费在线观看视频 I 午夜夫妻视频 I 久久久久久网站 I 天堂网男人 I 欧美大波大乳人奶 I 丝袜 中出 制服 人妻 美腿 I 窝窝午夜理论片影院 I 日韩在线伦理电影 I 韩国特级毛片 I 亚洲欧美另类激情 I 在线成人日韩 I 麻豆视频免费看 I 黄色生活毛片 I 极品一线天小嫩嫩真紧 I 色久天堂 I 久久久久久黄色片 I 林智妍三级露全乳电影视频 I 大肉大捧一进一出好爽视频 I 空乘伦理hd I 少妇口述与子做过爱 I 成人免费影片 I 国产精品国内免费一区二区三区 I 日韩制服一区 I 青青草福利在线 I 日本在线观看不卡视频 I 婷婷六月综合亚洲 I 国产又粗又黄又硬 I 美女扒开屁股让男子桶爽 I 欧美性午夜视频观看 I 欧美狠狠插 I 亚洲福利在线观看视频 I 无码抽搐高潮喷水流白浆 I 亚洲欧美国产日韩色伦 I 你懂的视频网站在线观看 I www.蜜桃视频在线观看 I 日本无码人妻精品一区二区蜜桃 I 久久中文字幕人妻丝袜 I 碰草在线视频 I 日韩精品成人av网站

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

2020/10/27 10:04:30   閱讀:2691    發布者:2691

空值合并運算符 '??'

在本文中,我們將值既不是null 也不是undefined 的表達式稱為已定義的(defined

空值合并運算符(nullish coalescing operator)的寫法為兩個問號??

a ?? b 的結果是:

  • 如果a 是已定義的,則結果為a,
  • 如果a 不是已定義的,則結果為b。

換句話說,如果第一個參數不是null/undefined,則?? 返回第一個參數。否則,返回第二個參數。

空值合并運算符并不是什么全新的東西。它只是一種獲得兩者中的第一個已定義的值的不錯的語法。

我們可以使用我們已知的運算符重寫result = a ?? b,像這樣:

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

通常?? 的使用場景是,為可能是未定義的變量提供一個默認值。

例如,在這里,如果user 是未定義的,我們則顯示Anonymous

let user;
alert(user ?? "Anonymous"); // Anonymous

當然,如果user 的值為除null/undefined 外的任意值,那么我們看到的將是它:

let user = "John";
alert(user ?? "Anonymous"); // John

我們還可以使用?? 序列從一系列的值中選擇出第一個非null/undefined 的值。

假設我們在變量firstNamelastName nickName 中存儲著一個用戶的數據。如果用戶決定不輸入值,則所有這些變量的值都可能是未定義的。

我們想使用這些變量之一顯示用戶名,如果這些變量的值都是未定義的,則顯示 "Anonymous"

讓我們使用?? 運算符來實現這一需求:

let firstName = null;
let lastName = null;
let nickName = "Supercoder";
// 顯示第一個已定義的值
alert(firstName ?? lastName ?? nickName ?? "Anonymous"); // Supercoder

|| 比較

或運算符|| 可以以與?? 運算符相同的方式使用。

例如,在上面的代碼中,我們可以用|| 替換掉??,也可以獲得相同的結果:

let firstName = null;
let lastName = null;
let nickName = "Supercoder";
// 顯示第一個真值:
alert(firstName || lastName || nickName || "Anonymous"); // Supercoder

|| 運算符自 JavaScript 誕生就存在,因此開發者長期將其用于這種目的。

另一方面,空值合并運算符?? 是最近才被添加到 JavaScript 中的,它的出現是因為人們對|| 不太滿意。

它們之間重要的區別是:

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

換句話說,|| 無法區分false0、空字符串"" null/undefined。它們都一樣 —— 假值(falsy values)。如果其中任何一個是|| 的第一個參數,那么我們將得到第二個參數作為結果。

不過在實際中,我們可能只想在變量的值為null/undefined 時使用默認值。也就是說,當該值確實未知或未被設置時。

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

let height = 0;
alert(height || 100); // 100
alert(height ?? 100); // 0
  • height || 100 首先會檢查height 是否為一個假值,發現它確實是。
    • 所以,結果為第二個參數,100。
  • height ?? 100 首先會檢查height 是否為null/undefined,發現它不是。
    • 所以,結果為height 的原始值,0。

如果高度0 為有效值,則不應將其替換為默認值,所以?? 能夠得出正確的結果。

優先級

?? 運算符的優先級相當低:在 MDN table 中為5。因此,?? = ? 之前計算,但在大多數其他運算符(例如,+ *)之后計算。

因此,如果我們需要在還有其他運算符的表達式中使用?? 進行取值,需要考慮加括號:

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

否則,如果我們省略了括號,則由于* 的優先級比?? 高,它會先執行,進而導致錯誤的結果。

// 沒有括號
let area = height ?? 100 * width ?? 50;
// ……與下面這行代碼的計算方式相同(應該不是我們所期望的):
let area = height ?? (100 * width) ?? 50;

?? 與&& 或|| 一起使用

出于安全原因,JavaScript 禁止將?? 運算符與&& || 運算符一起使用,除非使用括號明確指定了優先級。

下面的代碼會觸發一個語法錯誤:

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

這個限制無疑是值得商榷的,但它被添加到語言規范中是為了避免人們從|| 切換到?? 時的編程錯誤。

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

let x = (1 && 2) ?? 3; // 正常工作了
alert(x); // 2

鏈接:https://juejin.im/post/6884019851942166536

主站蜘蛛池模板: 一本大道大臿蕉视频无码 | 97久久超碰国产精品最新 | 亚洲婷婷在线视频 | 性猛交富婆xxxⅹ乱大交 | 少妇与公做了夜伦理69 | 2021久久国自产拍精品 | 热久久最新 | 亚洲国产成人精品无码区花野真一 | 亚洲精品一区二区三区香 | 亚洲最大激情中文字幕 | 亚洲中久无码永久在线观看软件 | 欧美大片高清免费看 | 亚洲精品大片www | 国产免费久久精品99re丫丫 | 欧美另类精品xxxxxx高跟鞋 | 精品九九视频 | 久久久久久久久网站 | 国产精品亚洲а∨天堂网不卡 | 国产一区二区三区在线观看视频 | 国产乱子伦一区二区三区 | 亚洲欧美日韩中文二区 | 亚洲综合精品在线 | 成人精品一区二区久久久 | 日韩视频在线观看免费视频 | 亚洲7天堂人人爽人人爽 | 青青草国产三级精品三级 | 精品日产1区2卡三卡麻豆 | 好爽又高潮了毛片免费下载 | 国产+成+人+亚洲欧洲自线 | 男女男精品视频站 | 国产精品污www在线观看 | 亚洲爆乳无码一区二区三区 | 日本三级黄在线观看 | 一区二区三区四区中文字幕 | av一区+二区在线播放 | 色窝窝无码一区二区三区色欲 | 久久久国产99久久国产久麻豆 | 男人的天堂网页 | 国产成人无遮挡免费视频 | 欧美四虎影院 | 欧美一级久久 | 久久午夜免费观看 | 国产欧美一区二区精品久导航 | 在线观看无码不卡av | 中文久久乱码一区二区 | 亚洲精品无码精品mv在线观看 | 久久伊人网站 | 国产精品人妻久久毛片高清无卡 | 2021国产精品视频网站 | 色偷偷一区二区无码视频 | 丁香婷婷深情五月亚洲 | 日韩国产在线播放 | 99re8在线精品视频免费播放 | 欧美精品一区二区视频在线观看 | 亚洲少妇网站 | 成年女人免费视频播放体验区 | 夜色www国产精品资源站 | 国产午夜大地久久 | 亚洲妇女无套内射精 | 成人女毛片视频免费播放 | 99re视频| 三级国产网站 | 夜夜天天拍拍 | 欧美精品一区二区三区四区 | 嫩草福利视频 | av在线黄 | 秋葵视频成人 | 性欧美交xxxxx免费视频 | 天天色天天爽 | 青青草国产精品亚洲专区无码 | 久久人人爽人人爽 | 色九九九| 成人午夜福利免费专区无码 | 日本xxxx高清色视频 | 日本公妇乱偷中文字幕 | 中文字幕人妻无码专区app | 欧美浮力第一页 | 国产巨大爆乳在线观看 | 久久九九久精品国产免费直播 | 乱中年女人伦av二区 | 国内裸体无遮挡免费视频 | 欧美老妇交乱视频在线观看 | 色天堂视频 | 国产成人一区二区三区在线观看 | 超碰中文在线 | 色屁屁草草影院ccyycom | 国产区又黄又硬高潮的视频 | 亚洲中文无码av永久伊人 | 婷婷色婷婷开心五月四房播播久久 | 亚洲第一自拍 | 男人添女人下部高潮全视频 | 国产精选一区 | 国产午精品午夜福利757视频播放 | 日韩丰满少妇无吗视频激情内射 | 欧美又大又黄又粗又长a片 成人午夜福利免费专区无码 | 久久久最新网址 | 成年女人午夜毛片免费视频 | 在线播放国产一区二区三区 | 91综合中文字幕乱偷在线 |