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

JavaScript代碼簡(jiǎn)化技巧實(shí)例解析

 更新時(shí)間:2020年09月09日 09:29:18   作者:蔣先森  
這篇文章主要介紹了JavaScript代碼簡(jiǎn)化技巧實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

函數(shù)式編程可以使您的代碼更簡(jiǎn)單。簡(jiǎn)單意味著代碼易于閱讀和理解,可測(cè)試和可維護(hù)。

在本文中,我描述了一些函數(shù)式編程(FP)技巧,您可以使用它們來簡(jiǎn)化代碼,從而使代碼更好。

擺脫臨時(shí)變量和不變性原則

函數(shù)式編程傾向于不變性,這種不變性原則意味著在初始化變量之后不會(huì)更改它們的值。同樣,創(chuàng)建對(duì)象或字符串后,您也無需對(duì)其進(jìn)行突變。

如果使用JavaScript編程,則所有變量定義都應(yīng)使用 const。對(duì)于正在閱讀您的代碼的任何人,常量定義都可以讓您高枕無憂:它保證永遠(yuǎn)不會(huì)重新分配變量,因?yàn)橹匦路峙涫遣豢赡艿?,所以讀者的大腦從跟蹤和識(shí)別代碼中重新分配的負(fù)擔(dān)中解脫出來。

何時(shí)需要更改值呢?首先,您可以擁有一個(gè)數(shù)組:

const fruits = ['apple', 'orange', 'banana']

要將新水果添加到此列表中,該怎么辦?解決方案是用新的或更新的值初始化一個(gè)新的常量變量,我們可以使用點(diǎn)擴(kuò)展符復(fù)制現(xiàn)有的 fruits 值:

const allFruits = [...fruits, 'pineapple']

您應(yīng)該在代碼的任何地方都遵循不變性原則,因?yàn)槿绻@樣做,您的代碼將變得更干凈。

您知道 fruits 變量的值永遠(yuǎn)不會(huì)改變,并且您第一次看到變量的聲明時(shí)就知道這一事實(shí),初始化后,在任何可見的 fruits 變量處,您都知道。

擺脫循環(huán)

考慮以下循環(huán):

var list = [];
var i = 0;
while (i < rows.length) {
  var row = rows[i];
  var message = {
    childAddress: row[1],
    action: 'switchToBackupNode2',
    role: 'edge'
  };
  list.push(message);
  i += 1;
}

函數(shù)編程方法去掉了while循環(huán),并使用map將行處理為一個(gè)列表。

const list = rows.map(r => ({ 
  childAddress: r[1],
  action: 'switchToBackupNode2',
  role: 'edge'
 }))

除了擺脫循環(huán)之外,這段代碼還刪除了臨時(shí)變量 row 和 message 以及循環(huán)變量 i。

結(jié)果更具可讀性,非常清晰。

為了公平起見,要獲得此信任級(jí)別,您需要首先了解map函數(shù)。map函數(shù)在函數(shù)式編程中無處不在,因此學(xué)習(xí)它是過渡到FP的重要步驟。

map是程序員用于列表處理的函數(shù)之一。處理列表中的數(shù)據(jù)是FP的重要組成部分,您還應(yīng)該學(xué)習(xí)其他列表處理功能:最重要的是 reduce 和 filter 函數(shù)。

刪除if..else

在我的簡(jiǎn)化代碼的實(shí)踐中,刪除 if 是一個(gè)有用的策略。有幾種策略可以用于從代碼中刪除 if 語句,并且應(yīng)用其中任何一種通常都會(huì)得到更清晰、更容易理解的結(jié)構(gòu)。

讓我們看一下刪除 if 語句的一些策略。

三元運(yùn)算符

三元運(yùn)算符是我從變量賦值中去掉 if 語句的主要工具。

考慮以下:

let message;
if (person !== null) {
 message = `hello, ${person}!`
} else {
 message = 'hey there!'
}

上面的代碼中有兩個(gè)問題:

我必須使用非 const 變量 message,因?yàn)閷?duì)于 if 結(jié)構(gòu),我無法在變量聲明中立即給 message 賦值。
考慮到它只完成了聲明變量和有條件地為變量賦值的簡(jiǎn)單任務(wù),代碼相當(dāng)冗長(zhǎng)和復(fù)雜。
使用三元運(yùn)算符? 可以在一行中完成相同的工作:

const message = person !== null ? `hello, ${person}!` : 'hey there!'

布爾運(yùn)算符 && 和 ||

布爾運(yùn)算符 && 和 || 為 if 語句提供有效的替代方法。

不要這樣做:

if (value) {
doStuff(value)
} else {
doStuff(1)
}

改進(jìn):

doStuff(value || 1)

這里的邏輯或操作符 || 提供了向函數(shù)傳遞默認(rèn)值的快速方法。每次不知道或不確定變量是否具有值時(shí),都可以使用相同的技巧:使用 || <default> 作為前綴提供默認(rèn)值。

這是一個(gè)如何使用邏輯與運(yùn)算符 && 的示例。首先,使用 if 的版本:

if (data) {
sendData(data.value);
}

然后我們使用 && 刪除 if :

data && sendData(data.value)

在這里,我們使用 && 來首先檢查數(shù)據(jù)變量是否包含值。如果沒有這個(gè)檢查,當(dāng)沒有值時(shí)代碼就會(huì)崩潰(換句話說,值為 null 或 undefined)。

在這里使用這些運(yùn)算符時(shí),我們依賴布爾表達(dá)式的短路求值。&& 和 || 運(yùn)算符,當(dāng)?shù)谝徊糠皱e(cuò)誤時(shí),JavaScript不會(huì)計(jì)算表達(dá)式的后半部分。

Map 和 查找

使用 map 作為查找 list 是替換一系列if語句的有效方法。考慮以下:

let language;
if (country === 'FI') {
	language = 'Finnish'
} else if (country === 'SE') {
	language = 'Swedish'
} else if (country === 'USA') {
 language = 'English (American)'
} else if (country === 'UK') {
 language = 'English (UK)'
} // etc...

更簡(jiǎn)潔的方法是使用國(guó)家/語言對(duì)的Map。

const languages = new Map([
 ['FI', 'Finnish'],
 ['SE', 'Swedish'],
 ['USA', 'English (American)'],
 ['UK', 'English (UK)'],
])
const language = languages.get('SE')
console.log(language) // Swedish

第二種實(shí)現(xiàn)要簡(jiǎn)單得多。該代碼立即顯示出它的意圖。另外,它將 language 變量轉(zhuǎn)換為使用 const。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • javascript 硬盤序列號(hào)+其它硬件信息

    javascript 硬盤序列號(hào)+其它硬件信息

    給政府做的,完全要求高,居然用硬盤序列號(hào),MAC地址,CPU地址三項(xiàng)來綁定指定的人來操作。
    2008-12-12
  • bootstrap table表格使用方法詳解

    bootstrap table表格使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了bootstrap table表格使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 如何使用JavaScript快速創(chuàng)建一個(gè)1到100的數(shù)組

    如何使用JavaScript快速創(chuàng)建一個(gè)1到100的數(shù)組

    平時(shí)寫代碼時(shí),我們會(huì)生產(chǎn)一些測(cè)試用的數(shù)組數(shù)據(jù),比如[1,100]的數(shù)組值,下面這篇文章主要給大家介紹了關(guān)于如何使用JavaScript快速創(chuàng)建一個(gè)1到100數(shù)組的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • JS中的函數(shù)與對(duì)象的創(chuàng)建方式

    JS中的函數(shù)與對(duì)象的創(chuàng)建方式

    這篇文章主要介紹了JS中的函數(shù)與對(duì)象的創(chuàng)建方式,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • d3.js實(shí)現(xiàn)簡(jiǎn)單的網(wǎng)絡(luò)拓?fù)鋱D實(shí)例代碼

    d3.js實(shí)現(xiàn)簡(jiǎn)單的網(wǎng)絡(luò)拓?fù)鋱D實(shí)例代碼

    最近一直在學(xué)習(xí)d3.js,大家都知道d3.js是一個(gè)非常不錯(cuò)的數(shù)據(jù)可視化庫,我們可以用它來做一些比較酷的東西,比如可以來顯示一些簡(jiǎn)單的網(wǎng)絡(luò)拓?fù)鋱D,這篇文中就通過實(shí)例代碼給大家介紹了如何利用d3.js實(shí)現(xiàn)簡(jiǎn)單的網(wǎng)絡(luò)拓?fù)鋱D,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-11-11
  • js獲取網(wǎng)頁高度(詳細(xì)整理)

    js獲取網(wǎng)頁高度(詳細(xì)整理)

    js獲取網(wǎng)頁高度包括(網(wǎng)頁可見區(qū)域高,屏幕分辨率的高,屏幕可用工作區(qū)高度,js 獲取瀏覽器高度 js 獲取屏幕高度)等等,各種高度,本文詳細(xì)整理了一些,需要了解的朋友可以參考下
    2012-12-12
  • js判斷元素是否隱藏的方法

    js判斷元素是否隱藏的方法

    這篇文章主要介紹了js判斷元素是否隱藏的方法,需要的朋友可以參考下
    2014-06-06
  • js實(shí)現(xiàn)select下拉框菜單

    js實(shí)現(xiàn)select下拉框菜單

    這篇文章主要介紹了js實(shí)現(xiàn)select下拉框菜單的詳細(xì)代碼,感興趣的小伙伴們可以參考一下
    2015-12-12
  • js實(shí)現(xiàn)3D旋轉(zhuǎn)相冊(cè)

    js實(shí)現(xiàn)3D旋轉(zhuǎn)相冊(cè)

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)3D旋轉(zhuǎn)相冊(cè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • 詳細(xì)分析jsonp的原理和實(shí)現(xiàn)方式

    詳細(xì)分析jsonp的原理和實(shí)現(xiàn)方式

    給大家圖文詳細(xì)分析一下jsonp的原理以及跨域問題的匯總。
    2017-11-11

最新評(píng)論

平果县| 招远市| 玉林市| 五莲县| 林芝县| 武定县| 临清市| 香格里拉县| 乌什县| 洞头县| 临武县| 越西县| 塔城市| 龙口市| 荔浦县| 独山县| 隆子县| 五台县| 安福县| 兰考县| 新余市| 凤台县| 磐安县| 米易县| 襄樊市| 广水市| 衡阳县| 武川县| 尚义县| 肇庆市| 开化县| 焉耆| 上林县| 雷州市| 阳谷县| 新营市| 囊谦县| 白城市| 洛南县| 怀化市| 剑川县|