一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - js教程 - 分享幾個JavaScript運算符的使用技巧

分享幾個JavaScript運算符的使用技巧

2022-03-09 16:15codercao js教程

這篇文章主要介紹了分享幾個JavaScript運算符的使用技巧,幫助大家更好的理解和學習使用JavaScript,感興趣的朋友可以了解下

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

一、可選鏈接運算符【?.】

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

相信大部分開發前端的的小伙伴們都會遇到null和未定義的屬性。JS語言的動態特性使其無法不碰到它們。特別是在處理嵌套對象時,以下代碼很常見:

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

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

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

對于靜態屬性用法是:

?
1
object?.property

對于動態屬性將其更改為:

?
1
object?.[expression]

上面的代碼可以簡化為:

?
<abbr id="6s88a"></abbr>
1
let id="codetool">

然后,如果我們有:

?
1
2
3
4
5
let data;
console.log(data?.children?.[0]?.title) // undefined
 
data  = {children: [{title:'codercao'}]}
console.log(data?.children?.[0]?.title) // codercao

這樣寫是不是更加簡單了呢? 由于操作符一旦為空值就會終止,因此也可以使用它來有條件地調用方法或應用條件邏輯

?
1
2
3
4
5
const conditionalProperty = null;
let index = 0;
 
console.log(conditionalProperty?.[index++]); // undefined
console.log(index);  // 0

對于方法的調用你可以這樣寫

?
1
object.runsOnlyIfMethodExists?.()

例如下面的parent對象,如果我們直接調用parent.getTitle(),則會報Uncaught TypeError: parent.getTitle is not a function錯誤,parent.getTitle?.()則會終止不會執行

?
1
2
3
4
5
6
7
8
9
10
11
let parent = {
    name: "parent",
    friends: ["p1", "p2", "p3"],
    getName: function() {
      console.log(this.name)
    }
  };
  
  parent.getName?.()   // parent
  parent.getTitle?.()  //不會執行
 

與無效合并一起使用

提供了一種方法來處理未定義或為空值和表達提供默認值。我們可以使用??運算符,為表達式提供默認值

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

因此,如果屬性不存在,則可以將無效的合并運算符與可選鏈接運算符結合使用以提供默認值。

?
    • 1
      2
      let id="codetool">

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

      ?
      1
      expr1 ??= expr2

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

      ?
      1
      x ??= y

      可能看起來等效于:

      ?
      1
      x = x ?? y;

      但事實并非如此!有細微的差別。

      空的合并運算符(??)從左到右操作,如果x不為空,則短路。因此,如果x不為null或未定義,則永遠不會對表達式y進行求值。因此,如果y是一個函數,它將根本不會被調用。因此,此邏輯賦值運算符等效于

      ?
      1
      x ?? (x = y);

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

      此邏輯賦值運算符僅在左側表達式為 falsy值時才賦值。Falsy與null有所不同,因為falsy可以是任何一種值:false,0,“”,null,undefined和NaN等

      語法

      ?
      1
      x ||= y

      等同于

      ?
      1
      x || (x = y)

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

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

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

      可能你已經猜到了,此邏輯賦值運算符僅在左側為真時才賦值。因此:

      ?
      1
      x &&= y

      等同于

      ?
      1
      x && (x = y)

      最后

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

      如果你也有優雅的優雅的JavaScript運算符使用技巧,請不要吝惜,在評論區一起交流~

      以上就是分享幾個JavaScript運算符的使用技巧的詳細內容,更多關于JavaScript運算符的使用的資料請關注服務器之家其它相關文章!

      原文鏈接:https://juejin.cn/post/6954273997731135518

      延伸 · 閱讀

      精彩推薦
      • js教程js實現驗證碼干擾(動態)

        js實現驗證碼干擾(動態)

        這篇文章主要為大家詳細介紹了js實現驗證碼干擾,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

        lzh~9812022-01-22
      • js教程js拖拉表格實現內容計算

        js拖拉表格實現內容計算

        這篇文章主要為大家詳細介紹了js拖拉表格實現內容計算,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

        莫兮是我11142022-03-06
      • js教程JavaScript實現篩選數組

        JavaScript實現篩選數組

        這篇文章主要為大家詳細介紹了JavaScript實現篩選數組,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

        崇志廣勤7422022-01-25
      • js教程js實現彈框效果

        js實現彈框效果

        這篇文章主要為大家詳細介紹了js實現彈框效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

        程序猿余某人3952022-02-20
      • js教程JavaScript使用setTimeout實現倒計時效果

        JavaScript使用setTimeout實現倒計時效果

        這篇文章主要為大家詳細介紹了JavaScript使用setTimeout實現倒計時效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

        清水拌墨茶5112022-01-21
      • js教程js仿淘寶放大鏡效果

        js仿淘寶放大鏡效果

        這篇文章主要為大家詳細介紹了js仿淘寶放大鏡效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

        屈小康11262021-12-21
      • js教程js實現簡單放大鏡特效

        js實現簡單放大鏡特效

        這篇文章主要為大家詳細介紹了js實現簡單放大鏡特效,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

        一個21歲的老同志9622022-02-13
      • js教程javascript代碼實現簡易計算器

        javascript代碼實現簡易計算器

        這篇文章主要為大家詳細介紹了javascript代碼實現簡易計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

        Hope°8952022-01-06
      主站蜘蛛池模板: 91av爱爱 | 亚洲AV永久无码精品澳门 | 欧美综合在线 | 亚洲AV午夜精品麻豆AV | 俄罗斯处女摘花 | 免费看片aⅴ免费大片 | 亚洲人成伊人成综合网久久 | 色怡红院| 肉色欧美久久久久久久蜜桃 | 窝窝影院午夜色在线视频 | 91porny紧身翘臀 | 91久久99热青草国产 | 3d动漫被吸乳羞羞 | 青草青草久热精品视频在线网站 | 日本嫩模| 亚洲欧美日韩国产一区二区精品 | 好爽好深好猛好舒服视频上 | 456成人免费高清视频 | 激情视频图片小说qvdo | 丰满肥臀风间由美357在线 | 亚洲女同在线观看 | 久久久久琪琪精品色 | 国产精品第四页 | 午夜亚洲 | 国产亚洲欧美在线中文bt天堂网 | 操极品女神 | av中文字幕网免费观看 | 欧美图片小说 | 99热这里只有精品久久免费 | 97国产精品久久碰碰牛牛 | 精品国产品香蕉在线观看 | 日本精品欧洲www | 免费毛片大全 | 免费观看国产精品 | 四虎精品成人免费观看 | 欧美日韩精品一区二区三区视频播放 | 色视频亚洲| 87影院在线观看视频在线观看 | 草逼视频免费看 | 506070老熟肥妇bbwxx视频 500第一精品 | 91视频破解版 |
        <abbr id="6s88a"></abbr>