成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

JavaScript多級判定代碼優(yōu)化淺析

瀏覽:21日期:2022-06-01 16:22:53
目錄
  • 一、場景
  • 二、優(yōu)化多級判定
    • 1.優(yōu)化if-else結(jié)構(gòu)
    • 2.二元運(yùn)算符簡化

一、場景

業(yè)務(wù)代碼里, 一次操作可能會前置多個判定, 我以前只是在函數(shù)的開頭使用if語句去做這些事情, 雖然只是攔截一下不需要做else, 但是好多個判定堆在一起看著會有點(diǎn)…low, 而且, 如果這些東西堆在函數(shù)開頭的話, 看起來就像這樣:

xxx () {  xxx  xxx  xxx  xxx  xxxxxxxxxxxxxxxxxxxxxxx  xxxxxxxxxxxxxxxxxxxxxxxxxxx  xxxxxxxxxxxxxxxxxxxxxxxxxxxxx  xxxxxxxxxxxxxxxxxxxxxxxxxx  xxxxxxxxxxxxxxxxxxxxxxxx  xxxxxxxxxxxxx}

像在豎大拇指 ), 咳…說回這種方法.

這其實(shí)是使用二元運(yùn)算符 "&&"完成的一種簡化寫法, 可以理解為一種沒有else的三元運(yùn)算(因?yàn)槲业倪壿嬂镄枰@種沒有處理辦法的寫法), 我原本以為它需要void來驅(qū)動…的確可以在這種表達(dá)式外圍包裹void, 我的確是這么做的, 整整一天.

void 運(yùn)算符對給定的表達(dá)式進(jìn)行求值,然后返回 undefined。

但其實(shí)根本沒必要, void與否并不干擾執(zhí)行.

在Vue源碼(此處僅指Vue2.6版, 我最近在看這個)里有大量的運(yùn)用邏輯運(yùn)算符來表達(dá) “那么” 或者 “so” 的寫法, 比如

src/core/vdom/patch.js中的這個函數(shù).

function sameInputType (a, b) {  if (a.tag !== "input") return true  let i  const typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type  const typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type  return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)}

二、優(yōu)化多級判定

最初我在使用這種改進(jìn)后的if結(jié)構(gòu), 不再使用包裹式, 而是這種像閘口一樣的結(jié)構(gòu).

當(dāng)然特殊情況也還是要用if-else結(jié)構(gòu), 能優(yōu)化就優(yōu)化, 不能也不要強(qiáng)求.

1.優(yōu)化if-else結(jié)構(gòu)

就像這樣:

if() {
if() {

} else if() {

} else if() {

}
} else if () {
if() {

} else if() {

} else {

}
}

再復(fù)雜一些, 再在內(nèi)部加入各種邏輯, 就有些頭疼了.

完全可以把每個條件單獨(dú)分出一個if, 順序不變, 比如以上可以優(yōu)化為:

if () {
if () {

}
if () {

}
if() {

}
}
if () {
if () {

}
if () {

} else { // else一般沒什么辦法...

}
}

else if里的"或"關(guān)系也可以單獨(dú)拆一個 if 出來, 在看起來很復(fù)雜的情況下, 提升可讀性.

圖示一下的話, if-else-if結(jié)構(gòu)就像深墻老院:

優(yōu)化后的if結(jié)構(gòu)更像是關(guān)隘:

有一個專有名詞validation gatekeeping(驗(yàn)證守護(hù)), 即是描述這種驗(yàn)證結(jié)構(gòu).

但是一定注意判定條件的次序, 有些地方是必須用else if的, 否則會出現(xiàn)一個條件同時執(zhí)行了多套處理方案的情況比如下面這個例子:

for (const key in newWorld) {  if (key === "webglGroup") {    this.worldList[oldWorldIndex][key]["children"] = this.worldList[oldWorldIndex][key]["children"].filter((ele) => { return ele.type !== "Group" });    this.worldList[oldWorldIndex][key]["children"].push(...newWorld[key]["children"].filter((ele) => { return ele.type === "Group" }));    for (const pro in newWorld[key]) pro !== "children" && pro !== "position" && pro !== "rotation" && pro !== "quaternion" && pro !== "scale" && (this.worldList[oldWorldIndex][key][pro] = newWorld[key][pro]);  } else if (key !== "frameInfo") this.worldList[oldWorldIndex][key] = newWorld[key];}

這里把else if替換成if就會導(dǎo)致keywebglGroup時兩條邏輯均會被執(zhí)行.

所以原則還是能優(yōu)化的優(yōu)化.

2.二元運(yùn)算符簡化

嵌套else-if結(jié)構(gòu)不太好用這種方式, 對于優(yōu)化后的if結(jié)構(gòu)用二元運(yùn)算符重寫, 個人覺得外層的大判定還是用if可讀性會更好, 內(nèi)部小判定用二元符簡潔, 但其實(shí)你要是用二元運(yùn)算符做嵌套判定結(jié)構(gòu)的話, 層級問題會難以處理, 多個’&&'運(yùn)算連在一起的時候JavaScript會將其解析為 僅最后一個&&為判定, 其他&&全表示 ‘和’ 關(guān)系.

當(dāng)然如果你愿意在里面寫函數(shù)的話是可以解決這個問題的, 用三元運(yùn)算符做大判定也是可以的, 但是不好…

重寫成如下:

if (10 > a > 0) {  a > 1 && b > 3 && console.log("HelloWorld_1");  (a > 2 && b > 4  ||  a === 100 && b > 10) && console.log("HelloWorld_2")  // 這句可以再拆一個if出來的, 只是為了說明判定原理, 括號需要加  // a大于2并b大于4 或 a等于100并b大于10 均可輸出HelloWorld_2}if (a > 10) {  // 可以結(jié)合三元運(yùn)算符  a === 12 ? c === 3 && console.log("a") : (b === 6 || c === 3 && a !== 15) && console.log("b")  // 如何讓前端同事追殺自己  // 如果a等于12, 判定如果c等于3輸出a  // 如果a不等于12, 判定b等于6或c等于3并且a不為15,輸出b}

但是這種邏輯運(yùn)算符我現(xiàn)在沒有找到能在判定完成之后跳出執(zhí)行的方法, 也就是說你可以用這個方法沿路做一些順手的操作, 但是不能像在if里那樣做完判定可以return跳出函數(shù).

const a = 3 < 4 && 1console.log(a)

然后, 額, 你可以用這種方法返回值

目的是提升可讀性和簡潔化代碼, 如果一個很長的處理方案或者很長的條件就這樣安插在二元運(yùn)算符中間, 適得其反.

到此這篇關(guān)于JavaScript多級判定代碼優(yōu)化淺析的文章就介紹到這了,更多相關(guān)JS多級判定內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: JavaScript
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
中文一区一区三区高中清不卡| 国产日韩欧美一区二区| 亚洲日本久久| 国产精品视频免费| 欧美在线三区| 久久久蜜桃精品| 国产精品一区不卡| 91国在线观看| 毛片av中文字幕一区二区| 91黄视频在线| 蜜桃av一区二区三区电影| 色丁香久综合在线久综合在线观看| 亚洲成av人片| 鲁大师成人一区二区三区| 伊人性伊人情综合网| 一本久道久久综合婷婷鲸鱼| 一区二区三区 在线观看视频| 国产日韩综合| 亚洲成a人片在线不卡一二三区| 免费在线亚洲| 青青草一区二区三区| 91久久一区二区| 蜜臀av一区二区| 欧美性猛交xxxx乱大交退制版| 久久精品国产99国产| 亚洲色图欧洲色图婷婷| 亚洲美女网站| 亚洲国产另类av| 久久在线视频| 美女一区二区三区| 欧美浪妇xxxx高跟鞋交| 国产乱子伦视频一区二区三区 | 国模娜娜一区二区三区| 欧美久久一二三四区| 成人中文字幕在线| 国产日韩精品一区| 亚洲精品在线观看免费| 性做久久久久久免费观看| 在线视频欧美精品| 国产精品自产自拍| 国产色综合一区| 一本色道久久99精品综合| 婷婷成人激情在线网| 色av一区二区| 国产成人丝袜美腿| 国产亚洲人成网站| 99在线|亚洲一区二区| 日韩av在线免费观看不卡| 欧美男生操女生| 成人av在线播放网站| 欧美激情自拍偷拍| 国产精品一区二区三区观看| 免费成人在线影院| 精品精品国产高清a毛片牛牛| 欧美久久综合| 亚洲18色成人| 制服丝袜中文字幕亚洲| 欧美激情成人在线| 亚洲成人av电影在线| 欧美一区二区视频免费观看| 91免费视频网址| 有码一区二区三区| 欧美日韩免费一区二区三区视频| 99re66热这里只有精品3直播| 亚洲精品国产一区二区三区四区在线| 色婷婷狠狠综合| 成人免费高清视频在线观看| 自拍偷拍亚洲欧美日韩| 91九色最新地址| 99热精品国产| 亚洲一区二区三区视频在线播放| 欧美美女一区二区三区| 欧美日韩一区二区三区免费| 午夜精品福利久久久| 日韩美一区二区三区| 好看的av在线不卡观看| 日韩激情在线观看| 久久免费美女视频| 久久riav二区三区| 丰满少妇在线播放bd日韩电影| 亚洲欧美怡红院| 欧美性大战久久久久久久蜜臀| 91啦中文在线观看| 日韩中文字幕麻豆| 久久久精品免费免费| 色婷婷综合久久久| 99久久精品一区| 日韩精品一卡二卡三卡四卡无卡| 精品国产sm最大网站免费看| 亚洲一区不卡| 成人午夜免费av| 亚洲电影一区二区| 久久久久久久一区| 欧美综合久久久| 亚洲精品黄色| 国产成人高清视频| 亚洲成av人片在www色猫咪| 久久综合久久综合久久综合| 美女精品一区| 欧美日韩综合另类| 国产乱子轮精品视频| 一区二区在线观看不卡| 精品剧情在线观看| 色哟哟一区二区| 韩日成人在线| 福利一区福利二区| 天堂成人国产精品一区| 国产精品色在线观看| 69堂亚洲精品首页| 先锋影音一区二区三区| 欧美成人亚洲| 国产成人综合在线观看| 香港成人在线视频| 中文字幕制服丝袜成人av| 日韩欧美的一区| 欧美在线|欧美| 99国产精品99久久久久久粉嫩| 99久久伊人久久99| 国内精品久久久久影院一蜜桃| 亚洲黄色性网站| 久久综合五月天婷婷伊人| 欧美视频日韩视频| 国产精品毛片va一区二区三区| 色综合天天狠狠| 国产成人欧美日韩在线电影| 日韩av一区二区三区四区| 亚洲免费观看高清完整版在线观看| 精品免费国产二区三区| 欧美色爱综合网| 小嫩嫩精品导航| 国产一区二区无遮挡| 波多野结衣亚洲| 国产精品资源网站| 蜜桃久久精品一区二区| 亚洲国产成人91porn| 国产精品五月天| 精品999在线播放| 欧美一区二区三区不卡| 91黄视频在线| 久久福利一区| 国产精品综合| 亚洲三级国产| 欧美视频二区| 91美女在线视频| www.亚洲在线| 国产宾馆实践打屁股91| 老司机免费视频一区二区| 午夜精品久久久久久久99樱桃| 亚洲丝袜美腿综合| 中文字幕免费观看一区| www欧美成人18+| 日韩欧美国产精品一区| 91精品国产综合久久国产大片| 欧美系列亚洲系列| 欧美在线免费播放| 在线视频欧美精品| 在线观看视频一区二区| 久久综合一区二区三区| 久久精品中文字幕一区二区三区| 99riav国产精品| 亚洲久久视频| 亚洲日本免费| 亚洲精品一品区二品区三品区| 伊人蜜桃色噜噜激情综合| 欧美日本国产| 欧美福利一区二区三区| 欧美在线播放一区二区| 91麻豆成人久久精品二区三区| 99国产精品一区| 91香蕉视频黄| 欧美国产另类| 国产精品地址| 极品中文字幕一区| 在线日本成人| 亚洲乱码久久| 国产精品女主播一区二区三区| 国产女主播一区二区| 免费久久久一本精品久久区| 久久久久久久久久久久久久一区| 久久精品道一区二区三区| 色成人在线视频| 欧美三级中文字| 欧美一区二区三区电影| 精品国产伦一区二区三区免费| 久久免费美女视频| 国产精品美女久久久久久2018| 亚洲少妇30p| 亚洲国产欧美在线人成| 日韩和欧美的一区| 国产一区二三区好的| 成人黄页在线观看| 91视频在线看| 在线精品一区| 亚洲一区在线直播| 欧美专区亚洲专区| 日韩女优视频免费观看| 久久亚洲一区二区三区明星换脸| 国产色91在线| 亚洲欧美激情在线| 日日噜噜夜夜狠狠视频欧美人|