Toptal 的快速實用的 JavaScript 備忘單:ES6 及更高版本

已發表: 2022-03-11

ECMAScript 6 (ES6) 是 Web 編程語言JavaScript的最新標準規範。 自HTML5Node.js的誕生以來,允許我們在服務器或桌面上運行 JavaScript 的運行時,JavaScript 獲得了獨特的發展勢頭。 企業的採用率越來越高,將其投入生產,因此它的最新功能備受期待。

我們創建了這個備忘單作為我們每天使用的 ES6 特性的列表。 在嘗試全面但簡潔的同時,新的 API 方法被分開了。 對於那些需要它們的人,請自行快速搜索或嘗試探索 MDN 文檔以獲取最新的實驗性 API。 但是,包含了一些最前沿的特性,例如下一個規範草案 (ES7) 中的asyncawait 。 這是因為我們大多數開發人員無論如何都會使用像 Babel 這樣的轉譯器來利用最新的 JavaScript。

您可以通過使用以下命令運行節點 REPL 來測試一些提到的技巧:

 node --use-strict $(node --v8-options | grep harm | awk '{print $1}' | xargs) #ES6

或者,直接使用 babel-node 在控制台中充分利用 Javascript。

相關: Toptal 開發人員的實用 CSS 備忘單

下載 JavaScript ES6 備忘單

單擊此處下載 JavaScript ES6 備忘單

JavaScript(ES6 及更高版本)備忘單

常數

讓 vs var

> 常量歐拉 = 2.7182818284
> 歐拉 = 13
> 歐拉
> 2.7182818284

> var 平均值 = 5
> var 平均值 = (平均值 + 1) / 2
> 平均
> 3
> 讓值 = '你好世界'
> 讓值 = '什麼是新的'
// -> 拋出 TypeError: Identifier 'value' has already been declared

警告! 如果是數組或對象,則引用保持不變 如果常量是對對象的引用,您仍然可以修改內容,但永遠不能更改變量。

> 常量常量 = []
> CONSTANTS.push(歐拉)
> 常數
> [ 2.7182818284 ]
> 常數 = { '歐拉': 2.7182818284 }
> 常數
> [ 2.7182818284 ]

注意臨時死區

> console.log(val) // -> '未定義'
> 變量值 = 3
> console.log(val) // -> 3

因為它相當於:

二進制、八進制和十六進製表示法

> 變量值
> 控制台日誌(驗證)
> 值 = 3
> 控制台日誌(驗證)

> 0b1001011101 // 605
> 0o6745 // 3557
> 0x2f50a // 193802

用“let/const”聲明的變量不會被提升:

新類型

> 控制台日誌(驗證)
// -> 拋出引用錯誤
> 讓 val = 3
> console.log(val) // -> 3

符號、地圖、弱地圖和集合

箭頭功能

新的作用域函數

> setTimeout(() => {
… console.log('延遲')
… }, 1000)

> {
... let cue = '盧克,我是你的父親'
控制台日誌(提示)
… }
> “盧克,我是你的父親”

等價於匿名函數

等效於立即調用的函數表達式 (IIFE)

> 設置超時(函數(){
… console.log('延遲')
… }.bind(this), 1000)

> (函數(){
... var cue = 'Luke,我是你父親' ... console.log(cue) //'Luke,我是 -
… }())
> console.log(cue) // 引用錯誤

對象符號新奇

字符串插值,感謝模板文字

// 計算屬性
> 讓鍵 = new Date().getTime()
> 讓 obj = { [鍵]: “值” }
> 對象
> { '1459958882881': '價值' }

// 對象字面量
氣球= {顏色,大小};

// 與...一樣
氣球 = {
顏色:顏色,
尺寸:尺寸

}

// 更好的方法符號
對象 = {
foo (a, b) { … },
條形 (x, y) { … }
}

> 常量名稱 = '老虎'
> 常量年齡 = 13
> console.log (`我的貓名叫 ${name} 並且是 ${age} 歲。`)
> 我的貓叫老虎,今年 13 歲。

// 我們可以保留換行符...
文本=(`貓

鎳幣`
)

</p>

默認參數

> 功能 howAreYou (answer = 'ok') {
console.log(answer) //可能是'ok'
}

承諾

類、繼承、Setter、Getter

新的承諾((解決,拒絕)=> {
request.get(url, (錯誤, 響應,
身體)=> {
如果(身體){
解析(JSON.parse(body));
} 別的 {
解決({});
}
})
}).then(() => { ... })
.catch((err) => 拋出錯誤)

// 並行化任務
承諾.所有([
承諾1,承諾2,承諾3
]).then(() => {
//所有任務完成
})

類矩形擴展形狀{
構造函數 (id, x, y, w, h) {
超級(id,x,y)
this.width = w
this.height = h
}
// 獲取器和設置器
設置寬度 (w) { this._width = w }
獲取寬度 () { 返回 this._width }
}

類圓形擴展形狀{
構造函數(id,x,y,半徑){
超級(id,x,y)
this.radius = 半徑
}
do_a (x) {
讓 a = 12;
super.do_a(x + a);
}
靜態 do_b() { ... }
}
Circle.do_b()

解構數組

解構對象

> 讓 [a, b, c, d] = [1, 2, 3, 4];
> 控制台.log(a);
> 1
> 乙
> 2

> 讓盧克 = { 職業:'絕地',
父親:“阿納金”}
> 讓 {職業,父親} = 盧克
> console.log(職業,父親)
> 絕地阿納金

擴展運算符

...像老闆一樣解構

// 將數組轉換為逗號分隔
// 值和更多
> 函數記錄器 (...args) {
console.log('%s 個參數',
參數長度)
args.forEach(console.log)
// arg[0], arg[1], arg[2]
}

> const [ 貓,狗,...魚 ] = [
“薛定諤”、“萊卡”、“尼莫”、“多莉”]
> 魚// -> ['Nemo', 'Dori']

或者做一個更好的推動

...以及未來 ES7 中的解構

> 讓 arr = [1, 2, 3]
> [...arr, 4, 5, 6]
> [1, 2, 3, 4, 5, 6]

{a, b, ...休息} = {a:1, b:2, c:3, d:4}

異步 ES7

等待 ES7

異步函數薛定諤(){
返回新的承諾((解決,拒絕)
=> {
常量結果 = Math.random > 0.5
設置超時(()=> {
返回結果? 解決('活著')
:拒絕('死')
})
})
}

嘗試 {
console.log(等待薛定諤())
// -> '活著'
} 捕捉(錯誤){
控制台日誌(錯誤)
// -> '死'
}

導出 ES7

導入 ES7

導出函數 sumTwo (a, b) {
返回 a + b;
}
出口常數歐拉 = 2.7182818284
讓東西= { sumTwo,EULER }
導出 { 東西默認 }

從“反應”導入反應
從 './myexports' 導入 { EULER }
從 './myexports' 導入 * 作為東西
// 相當於
從“./myexports”導入東西
// { sumTwo, 歐拉 }

發電機

它們返回一個實現迭代協議的對象。 即它有一個 next() 方法返回 { value: < some value>, done: <true or false> }

function* incRand (max) { // Asterisk 將其定義為生成器
而(真){
// yield 後暫停執行,resume
// 當 next(<something>) 被調用時
// 並將 <something> 分配給 x
讓 x = 產生 Math.floor(Math.random() * max + 1);
最大值 += x;
}
}

> var rng = incRand(2) // 返回一個生成器對象
> rng.next() // { value: <between 1 and 2>, done: false }
> rng.next(3) // 同上,但在 1 到 5 之間
> rng.next() // NaN,因為 5 + undefined 結果為 NaN
> rng.next(20) // 沒人期待 NaN 嗎?
> rng.throw(new Error('不可恢復的生成器狀態。'))
// 將從產量中拋出

相關:對速度的需求:頂級 JavaScript 編碼挑戰回顧