常數 |
| 讓 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('不可恢復的生成器狀態。')) // 將從產量中拋出 |