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 parameter.
2. 強大的reduce
陣列的reduce方法用途很廣。它一般被用來把陣列中每一項規約到單個值。但是你可以利用它做更多的事。
假設現在有乙個數列,你希望更新它的每一項(map的功能)然後篩選出一部分(filter的功能)。如果是先使用map然後filter的話,你需要遍歷這個陣列兩次。
在下面的**中,我們將數列中的值翻倍,然後挑選出那些大於50的數。有注意到我們是如何非常高效地使用reduce來同時完成map和filter方法的嗎?
const numbers = [10, 20, 30, 40];如果你認真閱讀了上面的**,你應該能理解reduce是可以取代map和filter的。const doubledover50 = numbers.reduce((finallist, num) =>
return finallist; }, ); doubledover50; // [60, 80]
reduce的另外乙個用途是能夠匹配給定字串中的圓括號。對於乙個含有圓括號的字串,我們需要知道(
和)
的數量是否一致,並且(
是否出現在)
之前。
下面的**中我們使用reduce可以輕鬆地解決這個問題。我們只需要先宣告乙個counter
變數,初值為0。在遇到(
時counter加一,遇到)
時counter減一。如果左右括號數目匹配,那最終結果為0。
//returns 0 if balanced.很多時候,你希望統計陣列中重複出現項的個數然後用乙個物件表示。那麼你可以使用reduce方法處理這個陣列。const isparensbalanced = (str) => else if(char === '(') else if(char === ')') else }, 0); //<-- starting value of the counter} isparensbalanced('(())') // 0 <-- balanced
isparensbalanced('(asdfds)') //0 <-- balanced
isparensbalanced('(()') // 1 <-- not balanced
isparensbalanced(')(') // -1 <-- not balanced
下面的**將統計每一種車的數目然後把總數用乙個物件表示。
var cars = ['bmw','benz', 'benz', 'tesla', 'bmw', 'toyota'];reduce的其他用處實在是太多了,建議閱讀mdn的相關**示例。var carsobj = cars.reduce(function (obj, name) , {}); carsobj; // =>
3. 物件解構有時候你不希望保留某些物件屬性,也許是因為它們包含敏感資訊或僅僅是太大了(just too big)。你可能會列舉整個物件然後刪除它們,但實際上只需要簡單的將這些無用屬性賦值給變數,然後把想要保留的有用部分作為剩餘引數就可以了。
下面的**裡,我們希望刪除_internal
和toobig
引數。我們可以把它們賦值給internal
和toobig
變數,然後在cleanobject
中儲存剩下的屬性以備後用。
let = , el2: '2', el3: '3'};在下面的**中,console.log(cleanobject); //
engine
是物件car
中巢狀的乙個物件。如果我們對engine
的vin
屬**興趣,使用解構賦值可以很輕鬆地得到它。
var car = }es6帶來了擴充套件運算子(...)。它一般被用來解構陣列,但你也可以用它處理物件。const modelandvin = (}) => vin: $`); } modelandvin(car); // => model: bmw 2018 vin: 12345
接下來,我們使用擴充套件運算子來展開乙個新的物件,第二個物件中的屬性值會改寫第乙個物件的屬性值。比如object2
的b
和c
就會改寫object1
的同名屬性。
let object1 =let object2 =
let merged = //spread and re-add into merged
console.log(merged) //
4. sets在es6中,因為set只儲存唯一值,所以你可以使用set刪除重複項。
let arr = [1, 1, 2, 2, 3, 3];使用擴充套件運算子就可以簡單的將set轉換為陣列。所以你可以對set使用array的所有原生方法。let deduped = [...new set(arr)] // [1, 2, 3]
比如我們想要對下面的set進行filter操作,獲取大於3的項。
let myset = new set([1,2, 3, 4, 5]);var filtered = [...myset].filter((x) => x > 3) // [4, 5]
5. 陣列解構有時候你會將函式返回的多個值放在乙個陣列裡。我們可以使用陣列解構來獲取其中每乙個值。
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
async function getfullpost()const [post, comments] = getfullpost();
你不得不知的這些海報設計小技巧
1 了解海報 海報又稱招貼畫,是一種傳播資訊的媒介,具有悠久的歷史,由手繪到印刷,它隨著社會的 發展,是藝術設計領域最直觀的,最能張揚個性並且真實記錄時代變遷的一種 大眾化的藝術形式,是我們可以在其中表達乙個國家的精神,乙個民族的精神,乙個時代的精神或是文化精神的無聲宣傳者。在豐富的視覺語言,獨特的...
前端工程師不得不知道的ES6新特性(三)
三 map map是 es6 新增的有序鍵值對集合。鍵值對的 key 和 value 都可以是任何型別的元素。通過 set key,value 方法為 map 設定新的鍵值對,如果設定的 key 已經存在則用新的 value 覆蓋,map 在比較 key 時也不做型別轉換,這一點和 set 類似。m...
HTTP協議不得不知的基礎
http超文字傳輸協議,是乙個引用層協議,基於 請求與響應 模式,以url作為網路資源的定位。url的格式 http host port path 其中,host 為合法的internet主機網域名稱或者ip位址,port是埠值,預設埠為80,path為請求資源的路徑 資源定位 url 資源管理 六...