日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
JavaScript中幾個優(yōu)雅的運算符使用技巧

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

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

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

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

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

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

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

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

object?.property

對于動態(tài)屬性將其更改為:

object?.[expression] 

上面的代碼可以簡化為:

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

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

const conditionalProperty = null;
let index = 0;

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

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

object.runsOnlyIfMethodExists?.()

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

let parent = {
name: "parent",
friends: ["p1", "p2", "p3"],
getName: function() {
console.log(this.name)
}
};

parent.getName?.() // parent
parent.getTitle?.() //不會執(zhí)行

與無效合并一起使用

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

console.log(undefined ?? 'codercao'); // codercao
復(fù)制代碼

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

let title = data?.children?.[0]?.title ?? 'codercao';
console.log(title); // codercao
復(fù)制代碼

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

expr1 ??= expr2
復(fù)制代碼

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

x ??= y
復(fù)制代碼

可能看起來等效于:

x = x ?? y;
復(fù)制代碼

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

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

x ?? (x = y);
復(fù)制代碼

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

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

語法

x ||= y
復(fù)制代碼

等同于

x || (x = y)
復(fù)制代碼

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

document.getElementById('search').innerHTML ||= 'No posts found matching this search.'
復(fù)制代碼

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

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

x &&= y
復(fù)制代碼

等同于

x && (x = y)
復(fù)制代碼

最后

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


新聞標(biāo)題:JavaScript中幾個優(yōu)雅的運算符使用技巧
當(dāng)前路徑:http://www.5511xx.com/article/cdpijgs.html