最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript中條件語(yǔ)句的優(yōu)化技巧總結(jié)

 更新時(shí)間:2020年12月04日 10:47:01   作者:CRMEB  
這篇文章主要給大家介紹了關(guān)于JavaScript中條件語(yǔ)句的優(yōu)化技巧,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

對(duì)多個(gè)條件使用 Array.includes

function test(fruit) {
 if (fruit == 'apple' || fruit == 'strawberry') {
 console.log('red');
 }
}

上面的例子看起來(lái)不錯(cuò)。然而,如果還有更多紅顏色的水果需要判斷呢,比如櫻桃和小紅莓,我們要用更多的 ||來(lái)擴(kuò)展這個(gè)表述嗎?

我們可以用 Array.includes 重寫(xiě)上面的條件!

function test(fruit) {
 const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries'];
 if (redFruits.includes(fruit)) {
 console.log('red');
 }
}

我們將條件提取到一個(gè)數(shù)組中。這樣做之后,代碼看起來(lái)更整潔。

更少的嵌套,盡早返回

擴(kuò)展前面的示例,以包含另外兩個(gè)條件:

如果沒(méi)有提供水果(名稱(chēng)),拋出錯(cuò)誤。

如果(紅色水果)數(shù)量超過(guò) 10 個(gè),接受并打印。

看看上面的代碼,我們有:

1 組過(guò)濾無(wú)效條件的 if/else 語(yǔ)句

3層的 if 嵌套語(yǔ)句(條件 1、2 和 3)

遵循的一般規(guī)則是,當(dāng)發(fā)現(xiàn)無(wú)效條件時(shí),提前返回。

/_ return early when invalid conditions found _/
function test(fruit, quantity) {
 const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries'];

 // condition 1: throw error early
 if (!fruit) throw new Error('No fruit!');

 // condition 2: must be red
 if (redFruits.includes(fruit)) {
console.log('red');

 // condition 3: must be big quantity
 if (quantity > 10) {
  console.log('big quantity');
 }
 }
}

這樣,我們就少了一層嵌套。這種編碼風(fēng)格很好,尤其是當(dāng)你有很長(zhǎng)的 if 語(yǔ)句時(shí)(想象一下,你需要滾動(dòng)到最底部才能知道還有一個(gè) else 語(yǔ)句,這并不好)。

通過(guò)反轉(zhuǎn)條件和提早返回,我們可以進(jìn)一步減少嵌套??纯聪旅娴臈l件 2,我們是怎么做的:

/_ return early when invalid conditions found _/
 
function test(fruit, quantity) {
 const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries'];
 
 if (!fruit) throw new Error('No fruit!'); // condition 1: throw error early
 if (!redFruits.includes(fruit)) return; // condition 2: stop when fruit is not red
 
 console.log('red');
 
 // condition 3: must be big quantity
 if (quantity > 10) {
  console.log('big quantity');
 }
}

通過(guò)反轉(zhuǎn)條件 2 的條件,我們的代碼現(xiàn)在沒(méi)有嵌套語(yǔ)句。當(dāng)我們有很長(zhǎng)的邏輯要處理時(shí),這種技術(shù)是有用的,當(dāng)一個(gè)條件沒(méi)有滿足時(shí),我們想要停止進(jìn)一步的處理。

然而,這并不是嚴(yán)格的規(guī)則。問(wèn)問(wèn)自己,這個(gè)版本(沒(méi)有嵌套)是否比前一個(gè)版本(嵌套的條件 2)更好、更易讀?

對(duì)于我來(lái)說(shuō),我將把它保留為以前的版本(條件 2 和嵌套)。這是因?yàn)椋?br /> 代碼簡(jiǎn)短而直接,如果嵌套,代碼就更清晰了,反轉(zhuǎn)條件可能會(huì)導(dǎo)致更多的思考過(guò)程(增加認(rèn)知負(fù)擔(dān))!

因此,總是以更少的嵌套及盡早返回為目標(biāo),但不要過(guò)度。

使用默認(rèn)的函數(shù)參數(shù)和解構(gòu)

在使用 JavaScript 時(shí)總是需要檢查 null 或 undefined 值并分配默認(rèn)值:

function test(fruit, quantity) {
 if (!fruit) return;
 const q = quantity || 1; 
}

//test results
test('banana');
test('apple', 2);

事實(shí)上,可以通過(guò)指定默認(rèn)的函數(shù)參數(shù)來(lái)消除變量 q。

function test(fruit, quantity = 1) {
 if (!fruit) return;
}

//test results
test('banana');
test('apple', 2);

請(qǐng)注意,每個(gè)參數(shù)都可以有自己的默認(rèn)函數(shù)參數(shù)。例如,我們也可以為 fruit 賦值:function test(fruit = 'unknown', quantity = 1)。

如果我們的 fruit 是一個(gè)對(duì)象:

function test(fruit) {
 if (fruit && fruit.name) {
  console.log (fruit.name);
 } else {
  console.log('unknown');
 }
}

//test results
test(undefined); // unknown
test({ }); // unknown
test({ name: 'apple', color: 'red' }); // apple

如果 fruit.name 是可用的,我們將打印該水果名稱(chēng),否則我們將打印 unknown。我們可以避免使用與默認(rèn)函數(shù)參數(shù)和解構(gòu)對(duì)條件 fruit && fruit.name進(jìn)行檢查。

function test({name} = {}) {
 console.log (name || 'unknown');
}

//test results
test(undefined); // unknown
test({ }); // unknown
test({ name: 'apple', color: 'red' }); // apple

因?yàn)槲覀冎恍枰械膶傩?name,所以我們可以使用 {name} 來(lái)解構(gòu),然后我們可以在代碼中使用 name 作為變量,而不是 fruit.name。

我們還將空對(duì)象 {} 指定為默認(rèn)值。如果我們不這樣做,當(dāng)執(zhí)行 test(undefined),不能解構(gòu) undefined 或 null 的屬性名時(shí),您將會(huì)得到錯(cuò)誤。因?yàn)樵?undefined中沒(méi)有 name 屬性。

選擇 Map 或?qū)ο笞置媪?,而不?Switch 語(yǔ)句

我們想要基于顏色打印水果名稱(chēng):

function test(color) {
 // use switch case to find fruits in color
 switch (color) {
  case 'red':
   return ['apple', 'strawberry'];
  case 'yellow':
   return ['banana', 'pineapple'];
  case 'purple':
   return ['grape', 'plum'];
  default:
   return [];
 }
}
 
//test results
test(null); // []
test('yellow'); // ['banana', 'pineapple']

上面的代碼似乎沒(méi)有什么問(wèn)題,但發(fā)現(xiàn)它相當(dāng)冗長(zhǎng)。同樣的結(jié)果可以通過(guò)對(duì)象字面量和更簡(jiǎn)潔的語(yǔ)法來(lái)實(shí)現(xiàn):

const fruitColor = {
  red: ['apple', 'strawberry'],
  yellow: ['banana', 'pineapple'],
  purple: ['grape', 'plum']
 };
 
function test(color) {
 return fruitColor[color] || [];
}

或者,可以使用 Map 來(lái)實(shí)現(xiàn)相同的結(jié)果:

const fruitColor = new Map()
  .set('red', ['apple', 'strawberry'])
  .set('yellow', ['banana', 'pineapple'])
  .set('purple', ['grape', 'plum']);
 
function test(color) {
 return fruitColor.get(color) || [];
}

Map 是 ES2015 以后可用的對(duì)象類(lèi)型,允許您存儲(chǔ)鍵值對(duì)。

對(duì)于上面的示例,我們實(shí)際上可以重構(gòu)代碼,以使用 Array.filter 獲得相同的結(jié)果。

const fruits = [
  { name: 'apple', color: 'red' },
  { name: 'strawberry', color: 'red' },
  { name: 'banana', color: 'yellow' },
  { name: 'pineapple', color: 'yellow' },
  { name: 'grape', color: 'purple' },
  { name: 'plum', color: 'purple' }
];

function test(color) {
 // use Array filter to find fruits in color
 
 return fruits.filter(f => f.color == color);
}

總有不止一種方法可以達(dá)到同樣的效果。展示了 4 個(gè)相同效果的例子。

所有或部分使用 Array.every & Array.some 的條件

使用新的Javascript 數(shù)組函數(shù)來(lái)減少代碼行??纯聪旅娴拇a,我們想檢查所有的水果是否都是紅色的:

const fruits = [
  { name: 'apple', color: 'red' },
  { name: 'banana', color: 'yellow' },
  { name: 'grape', color: 'purple' }
 ];
 
function test() {
 let isAllRed = true;
 
 // condition: all fruits must be red
 for (let f of fruits) {
  if (!isAllRed) break;
  isAllRed = (f.color == 'red');
 }
 
 console.log(isAllRed); // false
}

代碼太長(zhǎng)了!我們可以用 Array.every 來(lái)減少行數(shù):

const fruits = [
  { name: 'apple', color: 'red' },
  { name: 'banana', color: 'yellow' },
  { name: 'grape', color: 'purple' }
 ];
 
function test() {
 // condition: short way, all fruits must be red
 const isAllRed = fruits.every(f => f.color == 'red');
 
 console.log(isAllRed); // false
}

現(xiàn)在干凈多了,對(duì)吧?類(lèi)似地,如果我們想用一行代碼來(lái)判斷任何一個(gè)水果是否為紅色,我們可以使用 Array.some。

const fruits = [
  { name: 'apple', color: 'red' },
  { name: 'banana', color: 'yellow' },
  { name: 'grape', color: 'purple' }
];
 
function test() {
 // condition: if any fruit is red
 const isAnyRed = fruits.some(f => f.color == 'red');
 console.log(isAnyRed); // true
}

到此這篇關(guān)于JavaScript中條件語(yǔ)句的優(yōu)化技巧的文章就介紹到這了,更多相關(guān)JS條件語(yǔ)句優(yōu)化技巧內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • javascript實(shí)現(xiàn)消滅星星小游戲簡(jiǎn)單版

    javascript實(shí)現(xiàn)消滅星星小游戲簡(jiǎn)單版

    消滅星星是一款經(jīng)典的益智手游,單位里看到同事天天在手機(jī)上玩的游戲,現(xiàn)在也有web版了,出于業(yè)余愛(ài)好,自己嘗試用javascript實(shí)現(xiàn)了下,就是略簡(jiǎn)單了點(diǎn),文中給出了完整的實(shí)例代碼,大家可以自行完善??!下面來(lái)一起看看吧。
    2016-11-11
  • xml轉(zhuǎn)json的js代碼

    xml轉(zhuǎn)json的js代碼

    xml轉(zhuǎn)json的js代碼,需要的朋友可以參考下
    2012-08-08
  • JavaScript中transform實(shí)現(xiàn)數(shù)字翻頁(yè)效果

    JavaScript中transform實(shí)現(xiàn)數(shù)字翻頁(yè)效果

    本文主要介紹JavaScript中利用transform實(shí)現(xiàn)數(shù)字翻頁(yè)效果的實(shí)例,具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • 小程序自定義tabbar導(dǎo)航欄及動(dòng)態(tài)控制tabbar功能實(shí)現(xiàn)方法(uniapp)

    小程序自定義tabbar導(dǎo)航欄及動(dòng)態(tài)控制tabbar功能實(shí)現(xiàn)方法(uniapp)

    在項(xiàng)目中遇到一個(gè)需求,根據(jù)不同的賬號(hào),生成不同的tabBar,下面這篇文章主要給大家介紹了關(guān)于小程序自定義tabbar導(dǎo)航欄及動(dòng)態(tài)控制tabbar功能實(shí)現(xiàn)方法(uniapp)的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • 小程序中使用css var變量(使js可以動(dòng)態(tài)設(shè)置css樣式屬性)

    小程序中使用css var變量(使js可以動(dòng)態(tài)設(shè)置css樣式屬性)

    這篇文章主要介紹了小程序中使用css var變量,使js可以動(dòng)態(tài)設(shè)置css樣式屬性,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • layui使用templet格式化表格數(shù)據(jù)的方法

    layui使用templet格式化表格數(shù)據(jù)的方法

    今天小編就為大家分享一篇layui使用templet格式化表格數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09
  • 詳解ES6?中的迭代器和生成器

    詳解ES6?中的迭代器和生成器

    迭代器是一個(gè)統(tǒng)一的接口,它的作用是使各種數(shù)據(jù)結(jié)構(gòu)可以被便捷的訪問(wèn),它是通過(guò)一個(gè)鍵為Symbol.iterator的方法來(lái)實(shí)現(xiàn),這篇文章主要介紹了ES6?中的迭代器和生成器,需要的朋友可以參考下
    2022-08-08
  • jquery動(dòng)態(tài)添加刪除(tr/td)

    jquery動(dòng)態(tài)添加刪除(tr/td)

    這篇文章主要介紹了jquery動(dòng)態(tài)添加刪除(tr/td)的方法,需要的朋友可以參考下
    2015-02-02
  • element-ui上傳一張圖片后隱藏上傳按鈕功能

    element-ui上傳一張圖片后隱藏上傳按鈕功能

    這篇文章主要介紹了element-ui上傳一張圖片后隱藏上傳按鈕功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-05-05
  • JS中跳出循環(huán)的示例代碼

    JS中跳出循環(huán)的示例代碼

    for循環(huán)中我們使用continue;終止本次循環(huán)計(jì)入下一個(gè)循環(huán),使用break終止整個(gè)循環(huán)。下面小編通過(guò)本文給大家分享JS中跳出循環(huán)的示例代碼,需要的朋友參考下吧
    2017-09-09

最新評(píng)論

昌江| 襄汾县| 长宁县| 三亚市| 江西省| 崇礼县| 保德县| 县级市| 根河市| 肥东县| 长宁区| 五常市| 浙江省| 黑龙江省| 观塘区| 怀化市| 沙河市| 上虞市| 吉林市| 桂阳县| 镇安县| 泰兴市| 石景山区| 方山县| 沙田区| 香港 | 崇信县| 中卫市| 东莞市| 江城| 金湖县| 绥宁县| 仁布县| 克山县| 远安县| 永清县| 大同县| 乌拉特前旗| 清新县| 钦州市| 文山县|