国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:21日期:2023-10-03 08:17:20

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

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

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

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

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

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

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

對于靜態屬性用法是:

object?.property

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

object?.[expression]

上面的代碼可以簡化為:

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

然后,如果我們有:

let data;console.log(data?.children?.[0]?.title) // undefineddata = {children: [{title:’codercao’}]}console.log(data?.children?.[0]?.title) // codercao

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

const conditionalProperty = null;let index = 0;console.log(conditionalProperty?.[index++]); // undefinedconsole.log(index); // 0

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

object.runsOnlyIfMethodExists?.()

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

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

與無效合并一起使用

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

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

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

let title = data?.children?.[0]?.title ?? ’codercao’;console.log(title); // codercao二、邏輯空分配(?? =)

expr1 ??= expr2

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

x ??= y

可能看起來等效于:

x = x ?? y;

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

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

x ?? (x = y);三、邏輯或分配(|| =)

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

語法

x ||= y

等同于

x || (x = y)

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

document.getElementById(’search’).innerHTML ||= ’<i>No posts found matching this search.</i>’四、邏輯與分配(&& =)

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

x &&= y

等同于

x && (x = y)最后

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

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

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

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 亚洲国产小视频 | 国产日韩精品一区在线不卡 | 欧美性猛交xxxx免费看手交 | 欧美视频在线观 | 亚洲成年人在线观看 | 欧美日韩亚洲第一页 | 久久亚洲精品中文字幕二区 | 亚洲毛片在线播放 | 欧美成人亚洲综合精品欧美激情 | 成人午夜私人影院入口 | 99精品视频在线观看 | 香蕉香蕉国产片一级一级毛片 | 亚洲天堂精品在线观看 | 亚色网站| 狠狠色狠狠色综合 | 欧美精品 日韩 | 国产大片线上免费观看 | 国产嫩草影院在线观看 | 亚洲欧美日本国产综合在线 | 美国亚洲成年毛片 | 国产精品情人露脸在线观看 | 日韩欧美一区二区三区免费看 | 中文字幕在线视频网 | 一级一级 a爱片免费视频 | 成人午夜在线播放 | 丝袜一级片 | 国产一二三区在线 | 亚洲精品免费在线观看 | 亚洲 欧美 精品 中文第三 | 欧美18在线| 91香蕉成人免费网站 | 国产成人精品一区二三区在线观看 | 美女做爰视频在线观看免费 | 成人在线视频免费观看 | 大尺度福利视频奶水在线 | 欧美一级看片免费观看视频在线 | 久久国产精品国产精品 | 杨幂丝袜国产福利视频 | 日本韩国三级在线观看 | 亚洲美女自拍视频 | 欧美色欧美色 |