成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

幾個優雅的 JavaScript 運算符使用技巧

開發 前端
新版本的ECMAScript引入了三個新的邏輯賦值運算符:空運算符,AND和OR運算符,這些運算符的出現,也是希望讓我們的代碼更干凈簡潔,下面分享幾個優雅的JavaScript運算符使用技巧。

[[410796]]

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

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

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

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

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

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

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

對于靜態屬性用法是:

  1. object?.property 

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

  1. object?.[expression]  

上面的代碼可以簡化為: 

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

然后,如果我們有: 

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

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

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

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

  1. object.runsOnlyIfMethodExists?.() 

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

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

與無效合并一起使用

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

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

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

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

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

  1. expr1 ??= expr2 

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

  1. x ??= y 

可能看起來等效于: 

  1. xx = x ?? y; 

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

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

  1. x ?? (x = y); 

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

此邏輯賦值運算符僅在左側表達式為 falsy值時才賦值。Falsy值與null有所不同,因為falsy值可以是任何一種值:undefined,null,空字符串(雙引號""、單引號’’、反引號``),NaN,0。IE瀏覽器中的 document.all,也算是一個。

語法 

  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不支持該版本。 

 

責任編輯:龐桂玉 來源: 前端大全
相關推薦

2022-09-07 00:04:37

JavaScript運算符技巧

2021-05-07 06:27:29

JavaScript運算符開發

2014-08-14 10:12:45

SwiftNil Coalesc

2010-01-19 15:30:44

VB.NET比較運算符

2017-05-11 16:38:07

javascript邏輯運算符

2021-02-20 23:34:22

JavaScript運算符開發

2025-02-24 11:16:20

2009-08-11 15:51:08

C#運算符算術運算符

2023-03-01 15:18:01

JavaScripttypeof運算符

2020-06-18 10:26:43

JavaScript開發技術

2009-08-12 15:20:18

C#賦值運算符復合賦值運算符

2023-04-10 08:58:13

C#關系運算符

2009-08-12 15:02:49

C#賦值運算符簡單賦值運算符

2020-10-15 08:11:56

JavaScript邏輯運算符

2020-06-04 08:17:44

JavaScript延展操作運算符開發

2020-06-04 08:13:36

JavaScriptObject.is()運算符

2020-03-27 22:33:30

JavaScript運算符逗號

2009-11-18 09:37:31

PHP邏輯運算符

2009-11-18 09:02:55

PHP運算符

2009-11-26 11:12:07

PHP運算符
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一区二区精品视频 | 久久国产精品一区二区三区 | 国产成人精品999在线观看 | 国产黄色精品在线观看 | 中文字幕日韩在线 | 黄色毛片大全 | 欧美精品乱码99久久影院 | 亚洲a在线观看 | 一级黄色片美国 | 在线视频 亚洲 | 国产精品美女久久久久久久久久久 | 亚洲性人人天天夜夜摸 | 蜜桃视频在线观看免费视频网站www | 国产精品一区在线 | 久久国产精品免费一区二区三区 | 国产精品视频一二三 | 亚洲精品自在在线观看 | 伊人导航| 色片在线观看 | 国产成人免费一区二区60岁 | 亚洲免费精品 | 久久精品国产免费高清 | 国产精品久久久久国产a级 欧美日韩国产免费 | 久久一区二区三区四区 | 亚洲第一天堂 | 国外成人在线视频 | 欧美激情久久久 | 91原创视频在线观看 | 情侣酒店偷拍一区二区在线播放 | 中文字幕一区二区不卡 | 国产成人精品网站 | 国产成人精品免费 | 精品入口麻豆88视频 | 天天澡天天狠天天天做 | 91久久国产综合久久91精品网站 | 黄色片免费看视频 | 国产毛片久久久久久久久春天 | 在线播放国产一区二区三区 | 激情91 | 2021狠狠干 | 亚洲综合二区 |