原文地址:ES6 tips and tricks to make your code cleaner, shorter, and easier to read!
模板字面量(Template literals)
模板字面量比以前更容易處理字串。以'開頭,並且可以使用${variable}
插入變數。比較這兩行程式碼:
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/acf20bd3b6b02acde55161ba78e2ad0396d534f5e219ce7abc1d913d87fa8d93.png)
塊作用域語法(Syntax Block scoping)
JavaScript一直是函式作用域,這就是為什麼將整個JavaScript檔案包裝在一個空的立即呼叫函式表示式(IIFE)中變得很普遍的原因。這樣做是為了隔離檔案中的所有變數,因此沒有可變衝突。
現在,我們有塊作用域和兩個繫結到塊的新變數宣告。
Let宣告
這類似於var
但有一些明顯的差異。因為它是塊作用域,所以可以宣告具有相同名稱的新變數而不影響外部變數。
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/fef1d0bb7448eb97ec1fb649fb2130319cc983417662027a20f85154d04014dd.png)
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/a53cab89927bfdc4b25d0fe8d9595801cb04327a0a5880ee82123616e2dda0f3.png)
5 5 5 5 5
,因為變數i
在每次迭代時都會發生變化。
如果您將var
換為let
那麼一切都會改變。現在,每個迴圈建立一個新的塊作用域,其中i
的值繫結到該迴圈。
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/f76cab1fb6f3644aa71dc3f5b8a0ce29c6cde7ff5afb72d2c89f93cc925b6376.png)
var
和let
之間的另一個區別是let
不會提升而var
會。
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/5124705344899f0b808a7f93bae0ce8638f76fb98faf672a4a30328b958b6093.png)
let
而不是var
,除非特別需要提升或更寬鬆的var
宣告範圍。
const
如果你想在之前在JavaScript中宣告一個常量變數,那麼通常會在塊上方命名變數。但是,這不會保護變數-它只是讓其他開發人員知道它是一個常量不應該被更改。
現在有const
宣告。
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/93a106d75a40933ef02d0acea1b686f6058e9d5694722e919ce99b3afe774b93.png)
const
不會使變數成為不可變的,只是鎖定其賦值。如果您具有複雜的賦值(物件或陣列),則仍可以修改該值。
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/de77abb56eaba22ac9ce293d57b783434276641caae8e7b57a5df5266eee4089.png)
塊作用域函式的問題
現在指定函式宣告繫結到塊作用域。
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/945e124ccbf637872945d0dd8d33da688a35630351fd77801faae52c7131e007.png)
if
語句中宣告一個函式時會出現問題。
考慮一下:
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/1aa89931c10bf5ac8cd92e25eee3e7cd24d1b94f23b7a1bf4d7ecf43b81e695d.png)
something
是什麼結果都是'I didn\'t pass'
。
現在我們得到了'ReferenceError'
,因為baz
它始終受塊範圍的約束。
Spread
ES6引入了 ...
運算子,稱為“擴充套件運算子”。它有兩個主要用途:將陣列或物件擴充套件到新陣列或物件,以及將多個引數連線到陣列中。
第一個用例是你可能最常遇到的用例,所以我們先看一下。
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/9962572e45b17ad4e4ebe13eb7bead5c5776c9461c5d20963a2532fb2a65305a.png)
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/6aa292aac59bb3eef22cbdec7d0f1f6a98cb899f95f2d55c04da2e444bf69da1.png)
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/d1506326b4d14d708c232ba96279a32fe10f0acdbeb7668a9d0b1fdf5dce434f.png)
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/0b7286d25c2aa0db64834901c907ee7beb9df89ccf24ba53c283f8e9571d6be3.png)
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/d005fa1d2ed2ff924466780c7bd6a9c67b636d3f566bfeb5b72804482a1e6ed9.png)
預設引數(Default Parameters)
現在可以使用預設引數定義函式。使用預設值初始化缺失值或未定義值。請注意 - 因為null
和false
值被強制為0
。
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/05754d748a4827e972f22a7ee8d925fd627cc08da78ff72c0fcf4beef0dfe97f.png)
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/8d8d6c7d6b11fb8d2a1737de64d1754580be5b6d357e62effef1c6c33aaed9c0.png)
解構(Destructuring)
解構是將等號的左側的陣列或物件拆開的過程。陣列或物件可以來自變數、函式或方程式。
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/906bf84a87216279704fa2767b182374f903b0dffd049b3e2c485f2f025cfb34.png)
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/0ab716db22930d0ab369e3369e15c51282ce3889ab89fb7c3cf6e9f253ca3385.png)
'key:variable'
匹配完成的。
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/e1131e349ee146f9f53b7f7b4a888c7612fe232784a58b384eb39ec12d7b9413.png)
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/d108194964d93532e77d7336f2192b76812d7786cfad8ef1e380a41f55c6561d.png)
物件字面量和簡明引數
當您從變數建立物件字面量時,ES6允許您省略key(如果它與變數名稱相同)。
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/137e1707873bac20157b5300e1bd33cf2f27624243dfc2c233cb2b8ede92c13f.png)
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/22be6923db41f303ce33ea650195efb5fcf4ebd8b3db1c7f15aa40436b6d981e.png)
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/cea059f0b2cdb4d104bbab671e4c36ae8b9eb4be23eb8c1a0e7e0d6d2af80c9c.png)
age,name,company
無需額外的變數宣告。
動態屬性名稱
ES6增加了使用動態分配的鍵建立或新增屬性的功能。
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/f693a9d0026f827eac1ebfa205c637bb4fd4750f96e62dd71a67c2d4f9b20617.png)
箭頭函式
箭頭函式有兩個主要方面:結構和this
繫結。
它們具有比傳統函式更簡單的結構,因為它們不需要function
關鍵字,並且它們自動返回箭頭之後的任何內容。
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/774bdd6f07a1f8bc82c22570e69be31b1f8ba3467cd433f54404ad40209c7ff4.png)
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/599afb2f656665b2137b94dde2f5bff0019602e76d326ed61aafd2de15841202.png)
.map 、.forEach
或 .sort
。
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/b80d73e7925ff3c7b113678b98cb31e3b8fa56738be7bc4cba47f8db72c5fddf.png)
this
繫結行為引起的問題。具有預ES6功能的修復程式是儲存this
引用,通常作為self
變數。
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/2193c085052b725899837f1a00656bd22bb7c323b2e3cb092259ef5119adf177.png)
this
繫結是動態的。這意味著事件監聽器裡的this
和doSomething
內部的this
不會引用相同的東西。
在箭頭函式內部,this繫結是詞法,不是動態的。這是箭頭函式的主要設計特徵。
雖然詞法this繫結可能很棒,但有時候這並不是想要的。
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/c56fe9286a4d4a2421a6044d7375e55702d42c153dfdcf90d02ae2f5ee218251.png)
a.oneThing(6)
時,this.otherThing( b )
引用失敗,因為this
沒有指向物件a
,而是指向箭頭函式塊作用域。如果您使用ES6語法重寫之前的程式碼,請注意這一點。
for … of 迴圈
ES6新增了一種迭代陣列中每個值的方法。這與for ... in
迴圈鍵/索引的現有迴圈不同。
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/0d001645c6e02bb4fcd71bb843c1af7e4adaa3a3536ca689372f3364da2fd873.png)
for … of
迴圈可以省去每個迴圈內部新增let val = a[idx]
。
Arrays, strings, generators and collections
都可以在標準JavaScript中迭代,普通物件通常無法迭代除非為它定義了迭代器。
數字字面量
ES5程式碼很好地處理了十進位制和十六進位制數字格式,但未指定八進位制格式。事實上,它在嚴格模式下被主動禁止。
ES6新增了一種新格式,o
在初始化後新增一個0
宣告數字為八進位制的數字。還新增了二進位制格式。
![[譯]ES6提示和技巧,使您的程式碼更清晰,更短,更容易閱讀](https://i.iter01.com/images/25ed7380187cd33c797fc146b7adf5dabc3f84ebf26494989d256167bffda607.png)
更多…
本文只是一個簡單的引導,更多詳細內容請閱讀請閱讀Kyle Simpson 關於ES6 你所不知道的JavaScript一書