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

分享幾個(gè)JavaScript運(yùn)算符的使用技巧

 更新時(shí)間:2021年04月23日 17:23:19   作者:codercao  
這篇文章主要介紹了分享幾個(gè)JavaScript運(yùn)算符的使用技巧,幫助大家更好的理解和學(xué)習(xí)使用JavaScript,感興趣的朋友可以了解下

ECMAScript發(fā)展進(jìn)程中,會(huì)有很多功能的更新,比如銷毀,箭頭功能,模塊,它們極大的改變JavaScript編寫方式,可能有些人喜歡,有些人不喜歡,但像每個(gè)新功能一樣,我們最終會(huì)習(xí)慣它們。新版本的ECMAScript引入了三個(gè)新的邏輯賦值運(yùn)算符:空運(yùn)算符,AND和OR運(yùn)算符,這些運(yùn)算符的出現(xiàn),也是希望讓我們的代碼更干凈簡(jiǎn)潔,下面分享幾個(gè)優(yōu)雅的JavaScript運(yùn)算符使用技巧

一、可選鏈接運(yùn)算符【?.】

可選鏈接運(yùn)算符(Optional Chaining Operator) 處于ES2020提案的第4階段,因此應(yīng)將其添加到規(guī)范中。它改變了訪問(wèn)對(duì)象內(nèi)部屬性的方式,尤其是深層嵌套的屬性。它也可以作為TypeScript 3.7+中的功能使用。

相信大部分開發(fā)前端的的小伙伴們都會(huì)遇到null和未定義的屬性。JS語(yǔ)言的動(dòng)態(tài)特性使其無(wú)法不碰到它們。特別是在處理嵌套對(duì)象時(shí),以下代碼很常見:

if (data && data.children && data.children[0] && data.children[0].title) {
    // I have a title!
}


上面的代碼用于API響應(yīng),我必須解析JSON以確保名稱存在。但是,當(dāng)對(duì)象具有可選屬性或某些配置對(duì)象具有某些值的動(dòng)態(tài)映射時(shí),可能會(huì)遇到類似情況,需要檢查很多邊界條件。

這時(shí)候,如果我們使用可選鏈接運(yùn)算符,一切就變得更加輕松了。它為我們檢查嵌套屬性,而不必顯式搜索梯形圖。我們所要做的就是使用“?” 要檢查空值的屬性之后的運(yùn)算符。我們可以隨意在表達(dá)式中多次使用該運(yùn)算符,并且如果未定義任何項(xiàng),它將盡早返回。

對(duì)于靜態(tài)屬性用法是:

object?.property

對(duì)于動(dòng)態(tài)屬性將其更改為:

object?.[expression] 

上面的代碼可以簡(jiǎn)化為:

let title = data?.children?.[0]?.title;

然后,如果我們有:

let data;
console.log(data?.children?.[0]?.title) // undefined

data  = {children: [{title:'codercao'}]}
console.log(data?.children?.[0]?.title) // codercao

這樣寫是不是更加簡(jiǎn)單了呢? 由于操作符一旦為空值就會(huì)終止,因此也可以使用它來(lái)有條件地調(diào)用方法或應(yīng)用條件邏輯

const conditionalProperty = null;
let index = 0;

console.log(conditionalProperty?.[index++]); // undefined
console.log(index);  // 0

對(duì)于方法的調(diào)用你可以這樣寫

object.runsOnlyIfMethodExists?.()

例如下面的parent對(duì)象,如果我們直接調(diào)用parent.getTitle(),則會(huì)報(bào)Uncaught TypeError: parent.getTitle is not a function錯(cuò)誤,parent.getTitle?.()則會(huì)終止不會(huì)執(zhí)行

let parent = {
    name: "parent",
    friends: ["p1", "p2", "p3"],
    getName: function() {
      console.log(this.name)
    }
  };
  
  parent.getName?.()   // parent
  parent.getTitle?.()  //不會(huì)執(zhí)行
  

與無(wú)效合并一起使用

提供了一種方法來(lái)處理未定義或?yàn)榭罩岛捅磉_(dá)提供默認(rèn)值。我們可以使用??運(yùn)算符,為表達(dá)式提供默認(rèn)值

console.log(undefined ?? 'codercao'); // codercao

因此,如果屬性不存在,則可以將無(wú)效的合并運(yùn)算符與可選鏈接運(yùn)算符結(jié)合使用以提供默認(rèn)值。

let title = data?.children?.[0]?.title ?? 'codercao';
console.log(title); // codercao

二、邏輯空分配(?? =)

expr1 ??= expr2

邏輯空值運(yùn)算符僅在空值(空值或未定義)時(shí)才將值分配給expr1,表達(dá)方式:

x ??= y

可能看起來(lái)等效于:

x = x ?? y;

但事實(shí)并非如此!有細(xì)微的差別。

空的合并運(yùn)算符(??)從左到右操作,如果x不為空,則短路。因此,如果x不為null或未定義,則永遠(yuǎn)不會(huì)對(duì)表達(dá)式y(tǒng)進(jìn)行求值。因此,如果y是一個(gè)函數(shù),它將根本不會(huì)被調(diào)用。因此,此邏輯賦值運(yùn)算符等效于

x ?? (x = y);

三、邏輯或分配(|| =)

此邏輯賦值運(yùn)算符僅在左側(cè)表達(dá)式為 falsy值時(shí)才賦值。Falsy與null有所不同,因?yàn)閒alsy可以是任何一種值:false,0,“”,null,undefined和NaN等

語(yǔ)法

x ||= y

等同于

x || (x = y)

在我們想要保留現(xiàn)有值(如果不存在)的情況下,這很有用,否則我們想為其分配默認(rèn)值。例如,如果搜索請(qǐng)求中沒(méi)有數(shù)據(jù),我們希望將元素的內(nèi)部HTML設(shè)置為默認(rèn)值。否則,我們要顯示現(xiàn)有列表。這樣,我們避免了不必要的更新和任何副作用,例如解析,重新渲染,失去焦點(diǎn)等。我們可以簡(jiǎn)單地使用此運(yùn)算符來(lái)使用JavaScript更新HTML:

document.getElementById('search').innerHTML ||= '<i>No posts found matching this search.</i>'

四、邏輯與分配(&& =)

可能你已經(jīng)猜到了,此邏輯賦值運(yùn)算符僅在左側(cè)為真時(shí)才賦值。因此:

x &&= y

等同于

x && (x = y)

最后

本次分享幾個(gè)優(yōu)雅的JavaScript運(yùn)算符使用技巧,重點(diǎn)分享了可選鏈接運(yùn)算符的使用,這樣可以讓我們不需要再編寫大量我們例子中代碼即可輕松訪問(wèn)嵌套屬性。但是IE不支持它,因此,如果需要支持該版本或更舊版本的瀏覽器,則可能需要添加Babel插件。對(duì)于Node.js,需要為此升級(jí)到Node 14 LTS版本,因?yàn)?2.x不支持該版本。

如果你也有優(yōu)雅的優(yōu)雅的JavaScript運(yùn)算符使用技巧,請(qǐng)不要吝惜,在評(píng)論區(qū)一起交流~

以上就是分享幾個(gè)JavaScript運(yùn)算符的使用技巧的詳細(xì)內(nèi)容,更多關(guān)于JavaScript運(yùn)算符的使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • layer.js之回調(diào)銷毀對(duì)話框的例子

    layer.js之回調(diào)銷毀對(duì)話框的例子

    今天小編就為大家分享一篇layer.js之回調(diào)銷毀對(duì)話框的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09
  • 微信小程序中post方法與get方法的封裝

    微信小程序中post方法與get方法的封裝

    這篇文章主要介紹了微信小程序中post方法與get方法的封裝的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家掌握如何封裝,需要的朋友可以參考下
    2017-09-09
  • 微信小程序使用GoEasy實(shí)現(xiàn)websocket實(shí)時(shí)通訊

    微信小程序使用GoEasy實(shí)現(xiàn)websocket實(shí)時(shí)通訊

    這篇文章主要介紹了微信小程序使用GoEasy實(shí)現(xiàn)websocket實(shí)時(shí)通訊的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • js頁(yè)面跳轉(zhuǎn)的常用方法整理

    js頁(yè)面跳轉(zhuǎn)的常用方法整理

    跳轉(zhuǎn)頁(yè)面的方法有很多,在本文整理了一些比較常用,并有示例代碼,感興趣的朋友可以參考下
    2013-10-10
  • BootStrap 表單控件之單選按鈕水平排列

    BootStrap 表單控件之單選按鈕水平排列

    這篇文章主要介紹了BootStrap 表單控件之單選按鈕水平排列的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2017-05-05
  • 最新評(píng)論

    赣榆县| 永安市| 温宿县| 遵化市| 闻喜县| 东阿县| 岳普湖县| 石渠县| 五峰| 诏安县| 德安县| 阿合奇县| 津市市| 金塔县| 嘉定区| 比如县| 涞源县| 江华| 尤溪县| 大荔县| 宁安市| 齐齐哈尔市| 囊谦县| 衡阳县| 英超| 麟游县| 缙云县| 东宁县| 梧州市| 钦州市| 太和县| 镶黄旗| 石楼县| 织金县| 准格尔旗| 安国市| 永嘉县| 垣曲县| 梧州市| 横峰县| 乳源|