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

聊聊JavaScript中.?、??、??=的用法以及含義

 更新時間:2022年04月07日 15:43:34   作者:不知名前端  
今天項目中突然遇到了不太明白的寫法,下面這篇文章主要給大家介紹了關(guān)于JavaScript中.?、??、??=的用法以及含義的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下

前言

在項目中我們往往要做很多很多的空值判斷進行容錯處理,往往伴隨著三目運算、與或、if else來使用,不僅要寫很多冗余的代碼,后期維護起來也是滿屏的if else可以說是非常的痛苦了.今天分享幾個處理空值簡單的方法,希望可以解決大家的一些問題.

可選鏈(.?)

如果一個值為null、或者是undefined.那么我們再去用點操作符去調(diào)用一個方法或者訪問一個屬性會發(fā)生什么?

let a;
let b = a.name;

如果是上面的這樣的代碼,那么我們能得到一個報錯

其實這種情況就相當(dāng)于直接在undefined上面訪問name屬性.undefined和null是兩個比較特殊的數(shù)據(jù)類型,是不能用點操作符去訪問屬性的.那么在一個變量可能為null、或者undefined的時候,恰巧我又需要訪問這個變量的一個屬性,那我們應(yīng)該這樣做

let a;
let b;
if(!!a){
    b = a.name;
}else{
    b = undefined;
}

只有當(dāng)a存在的時候,我才會去訪問a的name屬性,如果你想再進一步處理,還可以繼續(xù)判斷以下a的數(shù)據(jù)類型.可是這不是我們今天的重點,就不多講了.我們可以看到,這樣一個簡單的邏輯,我們就要寫這么多的東西,那么有沒有簡單的寫法呢?看下面的例子

let a;
let b = a?.name;

我們終于看到.?這個東西了,其實這個就叫做可選鏈,表達的意思,就和剛才if else的例子是一個意思,只有當(dāng)a存在,同時a具有name屬性的時候,才會把值賦給b,否則就會將undefined賦值給b.重要的是,不管a存在與否,這么做都不會報錯.

當(dāng)然我們還可以這么干

let a;
let b;
b = a?.name?.age?.haha?.就是不報錯
a?.b?.c(“還是不報錯”)

我們看到,你后面可以無限接龍下去,不論有多少屬性,只要有最后可以訪問到屬性,訪問到最終的結(jié)果,就會賦值給b,否則,就把undefined賦值給b.(這樣才有資格叫鏈?zhǔn)浇Y(jié)構(gòu)嘛)

空值合并運算符(??)

有了上面的例子,接下來我們簡單一點,直接上舉例

let b;
let a = 0;
let c = { name:'buzhimingqianduan' }

if(!!a || a === 0 ){
?? ?b = a;
}else{
?? ?b = c;
}

對就是上面那個例子,當(dāng)我們想判斷一個值存在,但是它等于0的時候,我們也需要當(dāng)作它存在,于是就有了上面那樣的例子,其實我們還可以這樣做

let b;
let a = 0;
let c = { name:'buzhimingqianduan' }

b = a ?? c;

上面的例子,當(dāng)a除了undefined、或者null之外的任何值,b都會等于a,否則就等于c.

空值賦值運算符(??=)

和上面的例子類似

let b = '你好';
let a = 0
let c = null;
let d = '123‘
b ??= a;  // b = “你好”
c ??= d  // c = '123'

當(dāng)??=左側(cè)的值為null、undefined的時候,才會將右側(cè)變量的值賦值給左側(cè)變量.其他所有值都不會進行賦值.同樣在一些場景下,可以省略很多代碼.

趣味問答時間:

let a;
let b = "不知名前端"
let c = null;
let d = 0;
let e;

e ??= a?.b ?? c ?? d?.a ?? b;
console.log(e)

結(jié)果是什么呢???

哈哈一堆的問號.

值得注意的是 :?? 是忽視 null ,undefined 等錯誤的值

var ibo = {}
console.log(ibo?.a ?? 111) // ?111
var ibo = {a:{b:1}}
console.log(ibo?.a?.b ?? 111) //1

console.log(1??'2') // ?1
console.log(null ?? "xx") // xx
undefined
console.log(undefined ?? "xx") // ?xx
console.log( ' '?? "xx") ?// ?空值

最后

希望對大家有用,如果方便的話,關(guān)注一下,后面我會分享更多前端相關(guān)的知識,如果有朋友有想了解的內(nèi)容,也可以私信我.后面我會找時間分享

到此這篇關(guān)于JavaScript中.?、??、??=的用法以及含義的文章就介紹到這了,更多相關(guān)js中.?、??、??=用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 讓低版本瀏覽器支持input的placeholder屬性(js方法)

    讓低版本瀏覽器支持input的placeholder屬性(js方法)

    低版本瀏覽器一般都不會支持input的placeholder屬性,接下來使用js實現(xiàn)下,感興趣的朋友可以參考下哈
    2013-04-04
  • js+canvas實現(xiàn)動態(tài)吃豆人效果

    js+canvas實現(xiàn)動態(tài)吃豆人效果

    本文主要介紹了js+canvas實現(xiàn)動態(tài)吃豆人效果的實例。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • 基于jQuery的圖片不完全按比例自動縮小

    基于jQuery的圖片不完全按比例自動縮小

    有時我們會有這樣的需求:讓圖片顯示在固定大小的區(qū)域。如果不考慮 IE6 完全可以使用 css 的 max-width 限制寬度自動按比例縮小顯示,但是這樣有個問題,就是如果按比例縮小后,圖片高度不夠,那么就很難看了
    2014-07-07
  • JavaScript中檢測數(shù)組的3種方法小結(jié)

    JavaScript中檢測數(shù)組的3種方法小結(jié)

    數(shù)組檢測是指在編程中對數(shù)組進行驗證和檢查的過程,本文主要介紹了JavaScript中檢測數(shù)組的3種方法小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • bootstrap學(xué)習(xí)使用(導(dǎo)航條、下拉菜單、輪播、柵格布局等)

    bootstrap學(xué)習(xí)使用(導(dǎo)航條、下拉菜單、輪播、柵格布局等)

    這篇文章主要為大家詳細介紹了bootstrap框架、導(dǎo)航條、下拉菜單、輪播廣告carousel、柵格系統(tǒng)布局、標(biāo)簽頁tabs等相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • JavaScript數(shù)組常用方法實例講解總結(jié)

    JavaScript數(shù)組常用方法實例講解總結(jié)

    這篇文章主要介紹了JavaScript數(shù)組及常見方法,結(jié)合實例形式總結(jié)分析了JavaScript數(shù)組的基本獲取、添加、刪除、排序、翻轉(zhuǎn)等相關(guān)操作技巧,需要的朋友可以參考下
    2021-09-09
  • DPlayer.js視頻播放插件使用方法

    DPlayer.js視頻播放插件使用方法

    這篇文章主要為大家詳細介紹了JSx實現(xiàn)簡單控制視頻播放倍速,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Express結(jié)合Webpack的全棧自動刷新

    Express結(jié)合Webpack的全棧自動刷新

    現(xiàn)在,webpack可以說是最流行的模塊加載器一方面,它為前端靜態(tài)資源的組織和管理提供了相對較完善的解決方案,另一方面,它也很大程度上改變了前端開發(fā)的工作流程。下面小編來和大家一起學(xué)習(xí)
    2019-05-05
  • JavaScript學(xué)習(xí)筆記(三):JavaScript也有入口Main函數(shù)

    JavaScript學(xué)習(xí)筆記(三):JavaScript也有入口Main函數(shù)

    大家都知道在c和java中,有main函數(shù)貨main方法作為一個程序的入口函數(shù)或方法。在JS中從js源文件的頭部開始運行的,我們?nèi)匀豢梢蕴摌?gòu)出一個main函數(shù)來作為程序的起點,這樣一來不僅可以跟其他語言統(tǒng)一了,而且說不定你會對JS有更深的理解。感興趣的小伙跟著小編一起學(xué)習(xí)吧
    2015-09-09
  • 原生JS封裝_new函數(shù)實現(xiàn)new關(guān)鍵字的功能

    原生JS封裝_new函數(shù)實現(xiàn)new關(guān)鍵字的功能

    這篇文章主要介紹了原生JS封裝_new函數(shù),實現(xiàn)new關(guān)鍵字的功能 ,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08

最新評論

沭阳县| 上犹县| 年辖:市辖区| 金塔县| 内江市| 宽城| 遂溪县| 台南市| 镇原县| 乌拉特后旗| 额敏县| 历史| 都江堰市| 苍梧县| 龙泉市| 孟连| 沙湾县| 临澧县| 永川市| 东兰县| 庄浪县| 福鼎市| 巴林右旗| 涿州市| 会理县| 抚州市| 德令哈市| 沂南县| 山东| 广东省| 鄂托克前旗| 同德县| 越西县| 卫辉市| 西畴县| 郧西县| 永济市| 敦化市| 五河县| 乌鲁木齐市| 武鸣县|