一、ES5與ES6對比
var let const
1、ES5 聲明局部變量必須使用一個立即執(zhí)行函數,而ES6 使用{}+let;
2、使用var會變量提升,而使用let不會,但是let有一個臨時死區(qū),就是在還未聲明時調用會報錯;
3、let 的作用域在最近的 {} 之間;
4、const聲明局部常量,只有一次賦值的機會,必須在聲明的時候賦值;



二、ES6新增的數據類型
ES6在原基礎七種數據類型(number、string、boolean、symbol、undefined、null、object),在object上細分了幾種數據類型。
symbol
靜態(tài)屬性和靜態(tài)方法:靜態(tài)屬性是可以直接通過構造函數調用的屬性,靜態(tài)方法是調用函數。

總結:
1.Symbol()不能加new;
2.每一個Symbol()都是唯一;
3.創(chuàng)造私有屬性,要再塊級作用域以object[Symbol()] = ''保存;
object > set (Set是對象,可以儲存任何類型的唯一值)
作用:
1.數組去重

(1)是對象;(2)存儲的是唯一值;(3)對所有原始值進行去重;(4)對所有對象的引用可以去重;
ES6之前的數組去重:

ES6數組去重:

Set的方法:
new Set().add()??new Set().has()??new Set().delete()??
object? > map
new Map() 是彌補了只能將字符串作為key的缺點,new Map()可以將對象作為key;
object? > weakSet
對對象弱引用,如果一個對象被垃圾回收,則null;沒有辦法列出所有的值;
三、ES6新增的API
Object.assign

深拷貝就是倆個對象沒有任何交集,完美深拷貝是不可能的,因此Object.assign也是淺拷貝;
淺拷貝就是“=”,賦值,直接拷貝,不管其實際內存里有什么;
深拷貝就是完全拷貝,包括其地址,內存內的;

Object.assign是拷貝可枚舉的屬性,不可枚舉的屬性有toString(),__proto__。
Array.from
變數組,可將偽數組變數組;
ES 5? 寫法:a = Array.prototype.slice.call(a,0)?
ES6? 寫法:
let s = new Set(['foo',window])
Array.from(s)? ?// ["foo",window]
創(chuàng)建一個長度為5的空數組:
ES5:
Array.apply(null,{length:5})
ES6:
Array.from({length:5})? //創(chuàng)建一個長度為n的數組
Array.prototype.fill()
填充

Array.prototype.find()

Array.prototype.filter()

Array.prototype.findIndex

Array.prototype.copyWithin
Array.prototype.entries
Array.prototype.keys
Array.prototype.values
判斷一個字符串是否包含在其中的四種方法:
string.indexOf()
String.prototype.includes //?
string.search也可以,同時可以兼并正則;
string.match()
String.prototype.repeat
String.prototype.startsWith //以XX開頭? 可用xx.indexOf('x') === 0代替
String.prototype.endsWith //以XX結尾? 可用xx.indexOf('x') === xx.length-1代替
Number.EPSILON // 看JS的最小誤差
Number.isInteger //判斷是否為整數
Number.isSafeInteger?
Number.isFinite
Number.isNAN
parseInt的BUG
