你點的 ES6一些小技巧,請查收

2022-10-06 21:54:22 字數 3206 閱讀 4266

es6出來已經有好幾年了,同時很多新特性可以被巧妙地運用在專案中。我想要列下其中一些,希望它們對你有用。

如果你還知道其他一些小技巧,歡迎留言。我很高興把它們補充進來。

1. 強制要求引數

es6提供了預設引數值機制,允許你為引數設定預設值,防止在函式被呼叫時沒有傳入這些引數。

在下面的例子中,我們寫了乙個required()函式作為引數a和b的預設值。這意味著如果a或b其中有乙個引數沒有在呼叫時傳值,會預設required()函式,然後丟擲錯誤。

const required = () => ;

const add = (a = required(), b = required()) => a + b;

add(1, 2) //3

add(1) // error: missing www.cppcns.comparameter.

2. 強大的reduce

陣列的reduce方法用途很廣。它一般被用來把陣列中每一項規約到單個值。但是你可以利用它做更多的事。

2.1 使用reduce同時實現map和filter

假設現在有乙個數列,你希望更新它的每一項(map的功能)然後篩選出一部分(filter的功能)。如www.cppcns.com果是先使用map然後filter的話,你需要遍歷這個陣列兩次。

在下面的**中程式設計客棧,我們將數列中的值翻倍,然後挑選出那些大於50的數。有注意到我們是如何非常高效地使用reduce來同時完成map和filter方法的嗎?

const numbers = [10, 20, 30, 40];

const doubledover50 = numbers.reduce((finallist, num) =>

return finallist;

}, );

doubledover50; // [60, 80]

2.2 使用reduce取代map和filter

如果你認真閱讀了上面的**,你應該能理解reduce是可以取代map和filter的。

2.3 使用reduce匹配圓括號

reduce的另外乙個用途是能夠匹配給定字串中的圓括號。對於乙個含有圓括號的字串,我們需要知道(和)的數量是否一致,並且(是否出現在)之前。

下面的**中我們使用reduce可以輕鬆地解決這個問題。我們只需要先宣告乙個counter變數,初值為0。在遇到(時counter加一,遇到)時counter減一。如果左右括號數目匹配,那最終結果為0。

//returns 0 if balanced.

const isparensbalanced = (str) => else if(char === '(') else if(char === ')') else

}, 0); //

2.4 統計陣列中相同項的個數

很多時候,你希望統計陣列中重複出現項的個數然後用乙個物件表示。那麼你可以使用reduce方法處理這個陣列。

下面的**將統計每一種車的數目然後把總數用乙個物件表示。

var cars = ['bmw','benz', 'benz', 'tesla', 'bmw', 'toyota'];

var carsobj = cars.reduce(function (obj, name) , {});

carsobj; // =>

reduce的其他用處實在是太多了,我建議你閱讀mdn的相關**示例。

3. 物件解構

3.1 刪除不需要的屬性

有時候你不希望保留某些物件屬性,也許是因為它們包含敏感資訊或僅僅是太大了(just too big)。你可能會列舉整個物件然後刪除它們,但實際上只需要簡單的將這些無用屬性賦值給變數,然後把想要保留的有用部分作為剩餘引數就可以了。

下面的**裡,我們希望刪除_internal和toobig引數。我們可以把它們賦值給internal和toobig變數,然後在cleanobject中儲存剩下的屬性以備後用。

let = , el2: '2', el3: '3'};

console.log(cleanobject); //

3.2 在函式引數中解構巢狀物件

在下面的**中,engine是物件car中巢狀的乙個物件。如果我們對engine的vin屬**興趣,使用解構賦值可以很輕鬆地得到它。

var car =

}const modelandvin = (}) => vin: $`);

}modelandvin(car); // => model: bmw 2018 vin: 12345

3.3 合併物件

es6帶來了擴充套件運算子(...)。它一般被用來解構陣列,但你也可以用它處理物件。

接下來,我們使用擴充套件運算子來展開乙個新的物件,第二個物件中的屬性值會改寫第乙個物件的屬性值。比如object2的b和c就會改寫object1的同名屬性。

let object1 =

let object2 =

let merged = //spread and re-add into merged

console.log(merged) //

4. sets

4.1 使用set實現陣列去重

在es6中,因為set只儲存唯一值,所以你可以使用set刪除重複項。

let arr = [1, 1, 2, 2, 3, 3];

let deduped = [...new set(arr)] // [1, 2, 3]

4.2 對set使用陣列方法

使用擴充套件運算子就可以簡單的將set轉換為陣列。所以你可以對set使用array的所有原生方法。

比如我們想要對下面的set進行filter操作,獲取大於3的項。

let myset = new set([1,2, 3, 4, 5]);

var filtered = [...myset].filte程式設計客棧r((x) => x > 3) // [4, 5]

5. 陣列解構

有時候你會將函式返回的多個值放在乙個陣列裡。我們可以使用陣列解構來獲取其中每乙個值。

5.1 數值交換

let param1 = 1;

let param2 = 2;

//swap and assign param1 & param2 each others values

[param1, param2] = [param2, param1];

console.log(param1) // 2

console.log(param2) // 1

5.2 接收函式返回的多個結果

es6 一些小知識

本人最近被es6感興趣了,學習一些,以下就是自己總結的一些小知識 嚴格模式 es6 的模組自動採用嚴格模式,不管你有沒有在模組頭部加上 use strict 嚴格模式主要有以下限制。arguments.callee 與 argument.caller function fathercheck fat...

es6的一些技巧

1,強制要求引數 es6 有預設引數設定機制 允許在入參的括號裡給引數賦予預設值 防止函式在呼叫時沒有傳參 我們知道在js函式在入參的時候是入幾個都可以的 這就給了我們發揮的空間,我們來強制要求引數必須有 否則就報錯 const required const add a required b req...

es6的一些技巧總結 1

1 物件解構 1 刪除不需要的屬性 let console.log c 2 獲取需要的屬性 let a const getattr b1 3 合併物件let a let b let merger 2 set 1 陣列去重 let arr 1,1,2,2,3,3 let afterarr newset...