最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS中空值合并運算符 ?? 的使用

 更新時間:2025年07月17日 10:33:40   作者:Mr.怪獸  
本文介紹了JavaScript中的空值合并運算符??,解釋了它在null或undefined值時的使用,并對比了與邏輯運算符||的不同之處,感興趣的可以了解一下

什么是空合并運算符?

空合并運算符 ?? (Nullish coalescing operator) 是一個邏輯運算符,當其左側(cè)操作數(shù)為 null 或 undefined 時,它返回其右側(cè)操作數(shù),否則返回其左側(cè)操作數(shù)

const foo = null ?? 'default string';
console.log(foo);  //output: "default string"

const bar = 0 ?? 'default string'
console.log(bar);  //output: 0

基本語法

let result = value1 ?? value2;
  • 如果 value1 不是 null 或 undefined,則返回 value1。
  • 如果 value1 是 null 或 undefined,則返回 value2。

空值合并運算符的工作原理

與 邏輯或 (||) 運算符不同,空值合并運算符只會考慮 null 和 undefined,而不會將其他假值(如 false、0NaN、"" 空字符串等)視為需要替代的值。

示例:

let a = null;
let b = 5;
let c = undefined;
let d = 0;

console.log(a ?? b);  // 5,因為 a 是 null
console.log(c ?? b);  // 5,因為 c 是 undefined
console.log(d ?? b);  // 0,因為 d 不是 null 或 undefined,而是 0

比較 ?? 和 ||

let x = 0;
let y = 10;

console.log(x || y);  // 10,因為 x 是假值(0)
console.log(x ?? y);  // 0,因為 x 不是 null 或 undefined

在上面的例子中:

  • 使用 || 時,x 的值為 0,它被視為假值,所以返回了 y(即 10)。
  • 使用 ?? 時,x 是 0,它不是 null 或 undefined,所以返回了 0。

使用空值合并運算符的場景

提供默認值: 當一個值可能為 null 或 undefined 時,可以用 ?? 來提供一個默認值。

let userAge = null;
let defaultAge = 18;

let age = userAge ?? defaultAge;
console.log(age);  // 18,因為 userAge 是 null

避免無效值: 當你有多個潛在的 null 或 undefined 值時,可以使用空值合并運算符來選擇第一個有效值。

let firstName = null;
let lastName = undefined;
let defaultName = "Anonymous";

let name = firstName ?? lastName ?? defaultName;
console.log(name);  // "Anonymous" 因為 firstName 和 lastName 都是 null 或 undefined

空值合并與可選鏈(?.)結(jié)合使用

空值合并運算符和可選鏈(?.)結(jié)合使用時,能夠更安全地訪問對象的屬性,并且提供一個默認值。

let user = { name: "Alice" };

let userAge = user?.age ?? 18;
console.log(userAge);  // 18,因為 user 對象中沒有 `age` 屬性,所以返回默認值 18

在這個例子中,?. 用于安全地訪問 user.age,如果 age 不存在,它返回 undefined,然后 ?? 提供默認值 18。

??運算符 與 || 運算符的區(qū)別

很多人會搞混?? 運算符 與 || 運算符,覺得這兩個實現(xiàn)的效果都一樣。其實這是不嚴謹?shù)?,它們之間還是有一些細微的差別。
?? 和 || 主要區(qū)別在于 假 (false) 和 假值(falsy) 的區(qū)別。

  • ?? 僅當左操作數(shù)為 null 或 undefined 時, ?? 運算符才會將結(jié)果作為右操作數(shù)。
  • ||運算符會將左操作數(shù)的所有假值(falsy) 的結(jié)果作為右操作數(shù)

例如:

// 1. 使用 0 作為輸入 
const a = 0;
console.log(`a || 10 = ${a || 10}`); // a || 10 = 10
console.log(`a ?? 10 = ${a ?? 10}`); // a ?? 10 = 0

// 2. 空字符串 '' 作為輸入
const a = ''
console.log(`a || "ABC" = ${a || "ABC"}`); // a || "ABC" = ABC
console.log(`a ?? "ABC" = ${a ?? "ABC"}`); // a ?? "ABC" = 

// 3. 使用 null 作為輸入
const a = null;
console.log(`a || 10 = ${a || 10}`); // a || 10 = 10
console.log(`a ?? 10 = ${a ?? 10}`); // a ?? 10 = 10

// 4. 使用 undefined 作為輸入
const a = {name: ''}

console.log(`a.name ?? 'varun 1' = ${a.name ?? 'varun 1'}`); 
console.log(`a.name || 'varun 2' = ${a.name || 'varun 2'}`);
// a.name ?? 'varun 1' = 
// a.name || 'varun 2' = varun 2

// 5. 使用 false 作為輸入
const a = false;
console.log(`a || 10 = ${a || 10}`); // a || 10 = 10
console.log(`a ?? 10 = ${a ?? 10}`); // a ?? 10 = false

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

相關(guān)文章

  • js跑步算法的實現(xiàn)代碼

    js跑步算法的實現(xiàn)代碼

    這篇文章主要是對js跑步算法的實現(xiàn)代碼進行了詳細的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • 多種方法判斷Javascript對象是否存在

    多種方法判斷Javascript對象是否存在

    我們要判斷一個全局對象myObj是否存在,如果不存在,就對它進行聲明,Juriy Zaytsev指出判斷一個Javascript對象是否存在,有超過50種寫法,下面為大家介紹幾種比較常用的,感興趣的朋友可以參考下
    2013-09-09
  • js 彈出菜單/窗口效果

    js 彈出菜單/窗口效果

    想象一下,你把一個重要內(nèi)容放在一個彈出窗口,又不聚集到這個窗口。讓使用屏幕閱讀器的同學情何以堪,只有當他們 tab 到這頁面結(jié)束,還繼續(xù) tab,才可能找到這個彈窗
    2011-10-10
  • javascript利用apply和arguments復用方法

    javascript利用apply和arguments復用方法

    這篇文章主要介紹了javascript利用apply和arguments復用方法,有需要的朋友可以參考一下
    2013-11-11
  • 使用bootstrap validator的remote驗證代碼經(jīng)驗分享(推薦)

    使用bootstrap validator的remote驗證代碼經(jīng)驗分享(推薦)

    這篇文章主要介紹了使用bootstrap validator的remote驗證器驗證經(jīng)驗分享(推薦)的相關(guān)資料,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • JS不完全國際化&本地化手冊 之 理論篇

    JS不完全國際化&本地化手冊 之 理論篇

    最近加入到新項目組負責前端技術(shù)預研和選型,其中涉及到一個熟悉又陌生的需求——國際化&本地化。熟悉的是之前的項目也玩過,陌生的是之前的實現(xiàn)僅僅停留在"有"的階段而已。趁著這個機會好好學習整理一下,為后面的技術(shù)選型做準備
    2016-09-09
  • js判斷樣式className同時增加class或刪除class

    js判斷樣式className同時增加class或刪除class

    用正則表達式判斷多個class之間是否存在真正的class(前后空格的處理)然后增加class刪除class,本文給予實現(xiàn)方法,感興趣的朋友可以了解下,或許對你有所幫助
    2013-01-01
  • javascript 樹形導航菜單實例代碼

    javascript 樹形導航菜單實例代碼

    本文章來給大家提供一款適用于網(wǎng)站后臺的使用的javascript 樹形導航菜單特效代碼,有需要了解的同學可以參考一下
    2013-08-08
  • Echarts動態(tài)加載多條折線圖的實現(xiàn)代碼

    Echarts動態(tài)加載多條折線圖的實現(xiàn)代碼

    這篇文章主要介紹了Echarts動態(tài)加載多條折線圖的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • javascript基于HTML5 canvas制作畫箭頭組件

    javascript基于HTML5 canvas制作畫箭頭組件

    該組件實現(xiàn)了根據(jù)箭頭起止點坐標畫箭頭功能。目前組件可設(shè)置箭頭形狀(大小和角度)。
    2014-06-06

最新評論

萨迦县| 盈江县| 昭苏县| 会同县| 新龙县| 永宁县| 九寨沟县| 东宁县| 涿鹿县| 丹寨县| 中西区| 常德市| 彰武县| 敦煌市| 南陵县| 综艺| 且末县| 读书| 浦北县| 青浦区| 澄江县| 武夷山市| 会宁县| 乐昌市| 宝坻区| 邓州市| 隆林| 巴彦淖尔市| 德兴市| 深水埗区| 河间市| 太谷县| 常州市| 河南省| 奉节县| 得荣县| 九江市| 南丰县| 全州县| 天门市| 辰溪县|