1、簡介
ECMAScript和JavaScript的區別:
歷史原因就不贅述了,總之,ECMAScript是標準,JavaScript是具體實現。
ES6是 下一代js標準,涵蓋ES2015、ES2016、ES2017,但是一般泛指ES2015。
一個新的語法從草案到正式標準一般經歷5個階段:stage0 - stage4。
****babel只轉換新的語法,像箭頭函數這些,而不轉換新的API,像Promise、Object.assign、Array.from等(詳細請看:
https://github.com/babel/babel/blob/master/packages/babel-plugin-transform-runtime/src/definitions.js
),為了使用這些方法,就要安裝babel-polyfill,為當前環境提供一個墊片。****
npm install --save babel-polyfill
//腳本頭部引入
import 'babel-polyfill';
2、let + const
**** 不存在變量提升,只能先聲明再使用,不能重復聲明。
都存在暫時性死區(塊級作用域內有效,不會訪問到上級作用域內的相同變量) 。
盡量避免在塊級作用域中聲明函數,若必要,聲明函數表達式。
const保證的是指向的變量的內存地址不變,而不是值不變。
for (let i = 0; i < 3; i++) {//設置循環變量的部分為父作用域
//循環體部分為子作用域,所以 i 可以重新定義
let i = 'abc';
console.log(i);
}
// abc
// abc
// abc
function func(a, b){
//重新定義 a b 會報錯,屬于同一作用域
let a = 1;
let b = 2;
}
ES6中6種聲明變量的方式:var function let const import class
全局變量和頂層對象的屬性脫鉤。(ES5中全局變量即為window的屬性)
3、解構賦值
- 有數組和對象、字符串的解構賦值。
- 當等號右邊不是對象和數組時,會將其轉換成對象,所以null和undefined報錯。
- 允許設置默認值。
- 用途:
- 提取json數據
- 函數參數的默認值設置
- 導入指定模塊
let {pattern: variable} = {foo:1, bar: 2}//先模式,再變量
//盡量避免在解構賦值時使用圓括號,具體可以參考該章:http://es6.ruanyifeng.com/#docs/destructuring
4、字符串的擴展
字符編碼相關就不細說了,沒什么實踐經驗,總是看過就忘,用到的時候再去看了。
記幾個函數:
includes startsWith endsWith : 是否包含特定字符、是否已特定字符開頭結尾等
repeat padStart padEnds :字符串重復、補齊字符串等
5、正則的擴展
修飾符: y u
.source 正文 .flag 標志