摘要:必傳參數(shù)提供了默認(rèn)參數(shù)值,沒有該參數(shù)的情況下調(diào)用函數(shù)時(shí)使用的默認(rèn)值。這意味著如果未傳遞或,則調(diào)用函數(shù),將收到錯(cuò)誤。由于使用,該函數(shù)以數(shù)組的形式返回結(jié)果。使用數(shù)組析構(gòu),我們可以直接將結(jié)果賦值到相應(yīng)的變量中。
想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你!
EcmaScript 2015(ES6)已經(jīng)出來好幾年了,可以巧妙地使用各種新功能。列出并討論其中一些,你會發(fā)現(xiàn)它們很有用。如果你知道其他好方法,請?jiān)谠u論中回復(fù),共同學(xué)習(xí)。
1.必傳參數(shù)ES6提供了默認(rèn)參數(shù)值,沒有該參數(shù)的情況下調(diào)用函數(shù)時(shí)使用的默認(rèn)值。
在以下示例中,將required()函數(shù)設(shè)置為 a 和 b 參數(shù)的默認(rèn)值。 這意味著如果未傳遞a或b,則調(diào)用required()函數(shù),將收到錯(cuò)誤。
const required = () => {throw new Error("Missing parameter")}; //The below function will trow an error if either "a" or "b" is missing. const add = (a = required(), b = required()) => a + b; add(1, 2) //3 add(1) // Error: Missing parameter.2.強(qiáng)大的“reduce”
Array的reduce方法非常通用。它通常用于將項(xiàng)目數(shù)組轉(zhuǎn)換為單個(gè)值,但是你可以用它做更多的事情。
大多數(shù)這些技巧都依賴于初始值是數(shù)組或?qū)ο蠖皇窍褡址蜃兞窟@樣的簡單值。2.1 使用reduce同時(shí)進(jìn)行 map 和 filter 操作
假設(shè)有一個(gè)項(xiàng)目列表的情況,并且想要更新每個(gè)項(xiàng)目(即 Array.map 操作),然后只過濾幾個(gè)項(xiàng)目(即 Array.filter ),這意味著需要兩次循環(huán)遍歷列表!
在下面的示例中,我們希望將數(shù)組中的項(xiàng)的值加倍,然后選擇大于50的項(xiàng)。我們使用強(qiáng)大的 reduce 方法高效的同時(shí)做到:
const numbers = [10, 20, 30, 40]; const doubledOver50 = numbers.reduce((finalList, num) => { num = num * 2; //double each number (i.e. map) //filter number > 50 if (num > 50) { finalList.push(num); } return finalList; }, []); doubledOver50; // [60, 80]2.2 使用 “reduce” 代替是 “map” 或 “filter”
如果仔細(xì)查看上面的示例(2.1),就會知道 reduce 可以代替 map 或 filter !
2.3 使用 reduce 來判斷括號是否對稱// 返回 0 表示對稱 const isParensBalanced = (str) => { return str.split("").reduce((counter, char) => { if (counter < 0) { // 匹配到 ")" 在 "(" 前面 return counter; } else if ( char === "(") { return ++counter; } else if ( char === ")") { return --counter; } else { return counter; //其它字符 } }, 0) // 初始化值為0 } isParensBalanced("(())") // 0 <---對稱 isParensBalanced("(asdfds") // 0 <---對稱 isParensBalanced("(()") // 1 <---不對稱 isParensBalanced(")(") // 0 <---不對稱2.4 計(jì)算重復(fù)的數(shù)組項(xiàng)(轉(zhuǎn)換數(shù)組→對象)
有時(shí)你希望復(fù)制數(shù)組項(xiàng)或?qū)?shù)組轉(zhuǎn)換為對象。 你可以使用 reduce。
在下面的例子中,計(jì)算cars 中每個(gè)值重復(fù)數(shù)量,并將這組對應(yīng)的數(shù)據(jù)放到一個(gè)對象中:
var cars = ["BMW","Benz", "Benz", "Tesla", "BMW", "Toyota"]; var carsObj = cars.reduce(function (obj, name) { obj[name] = obj[name] ? ++obj[name] : 1; return obj; }, {}); carsObj; // => { BMW: 2, Benz: 2, Tesla: 1, Toyota: 1 }
reduce 還可以做更多的事情,建閱讀 MDN上列出的示例。
3. 對象解構(gòu) 3.1 屬性挑揀有時(shí)候你想挑揀需要的屬性排除一些平需要的屬性(可能是因?yàn)樗鼈儼舾行畔⒒蛘咛罅耍N覀儾恍枰闅v整個(gè)對象來挑揀它們,只需將這些不需要的數(shù)據(jù)提取到對應(yīng)變量中,并將有用的保存在rest參數(shù)中。
在下面的示例中,我們不需要的屬性如_internal和tooBig屬性,我們可以將它們分配給_internal和tooBig變量(名字要一樣),并將剩余的保存到在 rest parameter cleanObject 參數(shù)中:
let {_internal, tooBig, ...cleanObject} = {el1: "1", _internal:"secret", tooBig:{}, el2: "2", el3: "3"}; console.log(cleanObject); // {el1: "1", el2: "2", el3: "3"}3.2 在函數(shù)參數(shù)中分解嵌套對象
在下面的示例中,engine 屬性是 car 對象的一個(gè)內(nèi)嵌對象。如果我們想獲取 engine 中的 vin 值,可以使用以下解構(gòu)方式:
var car = { model: "bmw 2018", engine: { v6: true, turbo: true, vin: 12345 } } const modelAndVIN = ({model, engine: {vin}}) => { console.log(`model: ${model} vin: ${vin}`); } modelAndVIN(car); // => model: bmw 2018 vin: 123453.3 合并對象
ES6附帶了一個(gè)擴(kuò)展操作符(由三個(gè)點(diǎn)表示)。它通常用于解構(gòu)數(shù)組值,但也可以在對象上使用它。
在下面的示例中,我們使用擴(kuò)展操作符(...)在新對象中進(jìn)行擴(kuò)展。第二個(gè)對象中的屬性鍵將覆蓋第一個(gè)對象中的屬性鍵:
let object1 = { a:1, b:2,c:3 } let object2 = { b:30, c:40, d:50} let merged = {…object1, …object2} //spread and re-add into merged console.log(merged) // {a:1, b:30, c:40, d:50}4.Sets 4.1 使用 set 時(shí)行數(shù)組去重
在ES6中,可以使用 set 輕松時(shí)行數(shù)組去重,因?yàn)?set 只允許存儲惟一的值:
let arr = [1, 1, 2, 2, 3, 3]; let deduped = [...new Set(arr)] // [1, 2, 3]4.2 使用數(shù)組的方法
使用擴(kuò)展運(yùn)算符(...) 將 set 轉(zhuǎn)換為數(shù)組很簡單且在集合上使用所有數(shù)組方法!
let mySet = new Set([1,2, 3, 4, 5]); var filtered = [...mySet].filter((x) => x > 3) // [4, 5]5. 數(shù)組解構(gòu) 5.1 交換值
let param1 = 1; let param2 = 2; [param1, param2] = [param2, param1]; console.log(param1) // 2 console.log(param2) // 15.2 從一個(gè)函數(shù)接收和分配多個(gè)值
在下面的例子中,我們在/post獲取一個(gè)post,并在/comments 獲取相關(guān) comments 。由于使用 async/wait,該函數(shù)以數(shù)組的形式返回結(jié)果。使用數(shù)組析構(gòu),我們可以直接將結(jié)果賦值到相應(yīng)的變量中。
async function getFullPost(){ return await Promise.all([ fetch("/post"), fetch("/comments") ]); } const [post, comments] = getFullPost();
原文地址:https://medium.freecodecamp.o...
你的點(diǎn)贊是我持續(xù)分享好東西的動力,歡迎點(diǎn)贊!
交流干貨系列文章匯總?cè)缦拢X得不錯(cuò)點(diǎn)個(gè)Star,歡迎 加群 互相學(xué)習(xí)。
https://github.com/qq44924588...
我是小智,公眾號「大遷世界」作者,對前端技術(shù)保持學(xué)習(xí)愛好者。我會經(jīng)常分享自己所學(xué)所看的干貨,在進(jìn)階的路上,共勉!
關(guān)注公眾號,后臺回復(fù)福利,即可看到福利,你懂的。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/99713.html
摘要:系列種優(yōu)化頁面加載速度的方法隨筆分類中個(gè)最重要的技術(shù)點(diǎn)常用整理網(wǎng)頁性能管理詳解離線緩存簡介系列編寫高性能有趣的原生數(shù)組函數(shù)數(shù)據(jù)訪問性能優(yōu)化方案實(shí)現(xiàn)的大排序算法一怪對象常用方法函數(shù)收集數(shù)組的操作面向?qū)ο蠛驮屠^承中關(guān)鍵詞的優(yōu)雅解釋淺談系列 H5系列 10種優(yōu)化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個(gè)最重要的技術(shù)點(diǎn) 常用meta整理 網(wǎng)頁性能管理詳解 HTML5 ...
摘要:系列種優(yōu)化頁面加載速度的方法隨筆分類中個(gè)最重要的技術(shù)點(diǎn)常用整理網(wǎng)頁性能管理詳解離線緩存簡介系列編寫高性能有趣的原生數(shù)組函數(shù)數(shù)據(jù)訪問性能優(yōu)化方案實(shí)現(xiàn)的大排序算法一怪對象常用方法函數(shù)收集數(shù)組的操作面向?qū)ο蠛驮屠^承中關(guān)鍵詞的優(yōu)雅解釋淺談系列 H5系列 10種優(yōu)化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個(gè)最重要的技術(shù)點(diǎn) 常用meta整理 網(wǎng)頁性能管理詳解 HTML5 ...
摘要:如果你還知道其他一些小技巧,歡迎留言。下面的代碼將統(tǒng)計(jì)每一種車的數(shù)目然后把總數(shù)用一個(gè)對象表示。由于我們使用的是,函數(shù)把返回值放在一個(gè)數(shù)組中。而我們使用數(shù)組解構(gòu)后就可以把返回值直接賦給相應(yīng)的變量。查看更多我翻譯的文章請?jiān)L問項(xiàng)目地址專欄 原文地址:https://medium.freecodecamp.org/check-out-these-useful-ecmascript-2015-e...
摘要:所以,打包工具就出現(xiàn)了,它可以幫助做這些繁瑣的工作。打包工具介紹僅介紹款主流的打包工具,,,,以發(fā)布時(shí)間為順序。它定位是模塊打包器,而屬于構(gòu)建工具。而且在其他的打包工具在處理非網(wǎng)頁文件比如等基本還是需要借助它來實(shí)現(xiàn)。 本文當(dāng)時(shí)寫在本地,發(fā)現(xiàn)換電腦很不是方便,在這里記錄下。 前端的打包工具 打包工具可以更好的管理html,css,javascript,使用可以錦上添花,不使用也沒關(guān)系...
閱讀 1956·2021-11-22 15:29
閱讀 3252·2021-10-14 09:43
閱讀 1223·2021-10-08 10:22
閱讀 3342·2021-08-30 09:46
閱讀 1431·2019-08-30 15:55
閱讀 1923·2019-08-30 15:44
閱讀 849·2019-08-30 14:19
閱讀 1439·2019-08-30 13:13