原文地址:ES6 tips and tricks to make your code cleaner, shorter, and easier to read!git
模板字面量比之前更容易處理字符串。以'開頭,而且可使用${variable}
插入變量。比較這兩行代碼: es6
JavaScript一直是函數做用域,這就是爲何將整個JavaScript文件包裝在一個空的當即調用函數表達式(IIFE)中變得很廣泛的緣由。這樣作是爲了隔離文件中的全部變量,所以沒有可變衝突。github
如今,咱們有塊做用域和兩個綁定到塊的新變量聲明。面試
這相似於var
但有一些明顯的差別。由於它是塊做用域,因此能夠聲明具備相同名稱的新變量而不影響外部變量。 數組
5 5 5 5 5
,由於變量
i
在每次迭代時都會發生變化。
若是您將var
換爲let
那麼一切都會改變。如今,每一個循環建立一個新的塊做用域,其中i
的值綁定到該循環。 函數
var
和
let
之間的另外一個區別是
let
不會提高而
var
會。
因爲其更嚴格的範圍和更可預測的行爲,有些人會說應該使用
let
而不是
var
,除非特別須要提高或更寬鬆的
var
聲明範圍。
若是你想在以前在JavaScript中聲明一個常量變量,那麼一般會在塊上方命名變量。可是,這不會保護變量-它只是讓其餘開發人員知道它是一個常量不該該被更改。this
如今有const
聲明。 設計
const
不會使變量成爲不可變的,只是鎖定其賦值。若是您具備複雜的賦值(對象或數組),則仍能夠修改該值。3d
如今指定函數聲明綁定到塊做用域。code
當您在if
語句中聲明一個函數時會出現問題。
考慮一下:
在ES6以前,兩個函數聲明都會被提高,不管something
是什麼結果都是
'I didn\'t pass'
。 如今咱們獲得了
'ReferenceError'
,由於
baz
它始終受塊範圍的約束。
ES6引入了 ...
運算符,稱爲「擴展運算符」。它有兩個主要用途:將數組或對象擴展到新數組或對象,以及將多個參數鏈接到數組中。
第一個用例是你可能最常遇到的用例,因此咱們先看一下。
這對於將一組變量傳遞給數組中的函數很是有用。 還能夠擴展對象,將每一個鍵值對輸入到新對象中。(對象spread實際上在提案的第4階段,將在ES2018正式發佈。它僅在Chrome 60或更高版本,Firefox 55或更高版本以及Node 6.4.0或更高版本支持) 擴展運算符的另外一個特性是建立一個新的數組或對象。下面的示例爲其建立了一個新數組b,但c只引用了相同的數組。 第二個用例是將變量收集到一個數組中。當您不知道有多少參數傳遞給函數時,這很是有用。如今可使用默認參數定義函數。使用默認值初始化缺失值或未定義值。請注意 - 由於null
和false
值被強制爲0
。
解構是將等號的左側的數組或對象拆開的過程。數組或對象能夠來自變量、函數或方程式。
使用對象解構,能夠在花括號內列出對象的鍵以提取該鍵值對。 有時,您但願提取值,將它們分配給新變量。這是使用等號左側的'key:variable'
匹配完成的。
對象解構還能夠作得是容許爲多個變量賦值。
當您從變量建立對象字面量時,ES6容許您省略key(若是它與變量名稱相同)。
這也能夠與解構結合使用,使您的代碼更簡單,更清晰。 它還能夠用於解構傳遞給函數的對象。方法1和方法2是在ES6以前完成它的方法,方法3使用解構和簡明參數。 使用ES6,咱們能夠提取age,name,company
無需額外的變量聲明。
ES6增長了使用動態分配的鍵建立或添加屬性的功能。
箭頭函數有兩個主要方面:結構和this
綁定。
它們具備比傳統函數更簡單的結構,由於它們不須要function
關鍵字,而且它們自動返回箭頭以後的任何內容。
.map 、.forEach
或
.sort
。
除了具備更短的語法以外,它還修復了
this
綁定行爲引發的問題。具備預ES6功能的修復程序是存儲
this
引用,一般做爲
self
變量。
必須這樣作,由於
this
綁定是動態的。這意味着事件監聽器裏的
this
和
doSomething
內部的
this
不會引用相同的東西。
在箭頭函數內部,this綁定是詞法,不是動態的。這是箭頭函數的主要設計特徵。
雖然詞法this綁定可能很棒,但有時候這並非想要的。
當咱們執行a.oneThing(6)
時,
this.otherThing( b )
引用失敗,由於
this
沒有指向對象
a
,而是指向箭頭函數塊做用域。若是您使用ES6語法重寫以前的代碼,請注意這一點。
ES6添加了一種迭代數組中每一個值的方法。這與for ... in
循環鍵/索引的現有循環不一樣。
for … of
循環能夠省去每一個循環內部添加
let val = a[idx]
。
Arrays, strings, generators and collections
均可以在標準JavaScript中迭代,普通對象一般沒法迭代除非爲它定義了迭代器。
ES5代碼很好地處理了十進制和十六進制數字格式,但未指定八進制格式。事實上,它在嚴格模式下被主動禁止。
ES6添加了一種新格式,o
在初始化後添加一個0
聲明數字爲八進制的數字。還添加了二進制格式。
本文只是一個簡單的引導,更多詳細內容請閱讀請閱讀Kyle Simpson 關於ES6 你所不知道的JavaScript一書