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...