1、let聲明的變量沒有變量提升;
2、const聲明的變量:塊級作用域內有效,存在暫時性死區,變量指向的那個內存地址不得改動;
3、...tail解構出來的是數組或空數組
let [head, ...tail] = [1, 2, 3, 4]; head //1 tail //[2, 3, 4]
4、Iterator(遍歷器)是一種接口,作用:一是為各種數據結構,提供一個統一的、簡便的訪問接口,二是使得數據結構的成員能夠按某種次序排列,三是ES6創造了一種新的遍歷命令for...of
循環,Iterator接口主要供for...of
消費。
在ES6中,有三類數據結構原生具備Iterator接口:數組、某些類似數組的對象(例如:字符串)、Set和Map結構。
默認調用Iterator接口的情況:
*解構賦值
*擴展運算符(...)
*任何接受數組作為參數的場合
只要某種數據結構具有Iterator接口,都可以采用數組形式的解構賦值
5、解構賦值,默認值生效的條件是,對象的屬性值嚴格等于undefined
var {x = 3} = {x: undefined}; x //3 默認值生效var {x = 3} = {x: null}; x //null 默認值不生效
?6、u修飾符
用來正確處理大于\uFFFF的Unicode字符(中文字)。
var s = '級';/^\uD83D/u.test('\uD83D\uDC2A') //false /^\uD83D/.test('\uD83D\uDC2A') //true \uD83D\uDC2A是一個4字節的UTF-16編碼,代表一個字符。但是,ES5不支持4字節的UTF-16編碼,會將其識別為2個字符,導致第二行代碼結果為true。
加上了修飾符以后,ES6就會識別其為一個字符,所以第一行代碼結果為false.
?7、如果函數foo調用時參數不是對象,變量x和y就不會生成,從而報錯。
function foo ({x, y = 5}) {console.log(x, y) }foo({}) //undefined, 5 foo({x: 1}) //1, 5 foo({x: 1,y: 2}) //1, 2 foo() //TypeError: Cannot read property 'x' of undefined
?