ES6(2015),ECMAScript6.0,是JavaScript的 下一個版本標準。JavaScript是ECMAScript的實現,ECMAScript是JavaScript的標準。javascript
let代碼塊中有效,var全局範圍內有效且存在變量提高(即定義在後面的變量,前面能夠訪問到).html
{ var a = 3;/*全局都共享*/ let b = 2;/*被限定在代碼塊中*/ } console.log(a);/*3*/ //console.log(b);/*Uncaught ReferenceError: a is not defined*/
const聲明一個只讀變量,聲明以後不容許修改,必須初始化。java
{ const PI = 3.14; /*編譯器直接報錯*/ PI = 3.15;/*attempt to assign to const or readonly variable*/ console.log(PI); }
注:這裏的常量保證的只是地址不變,若是是基本類型,則保證數據不變;但若是是對象,只是保證對象的引用地址不變,對象裏面的屬性值依然能夠改變數組
{ const person={ name:"wade", age:20 } person.name="peter"; console.log(person);/*{name: "peter", age: 20}*/ console.log(person.name);/*peter*/ }
針對數組或者對象進行模式匹配,而後對其中的變量進行賦值。函數
解構的源=解構的目標 ,注意:左右解構要同樣code
左右映射,對應orm
//基本 { let [a, b, c] = [1, 2, 3]; console.log(a, b, c)//1 2 3 } //嵌套 { let [a, [b, c]] = [3, [5, 7]]; console.log(a, b, c)//3 5 7 } //忽略 { let [a, , b, c,] = [1, 3, 5, 6, 7]; console.log(a, b, c)//1 5 6 }
默認值,沒有對應的能夠給默認值htm
{ let [a = 1, b] = [, 10]; console.log(a,b)//1 10 }
剩餘運算符對象
{ let [a,...b]=[1,2,3,5] console.log(a)//1 console.log(b)//[2,3,5] }
對象解構與數組解構相似,注意{}與[]區別,左右對應便可,能匹配上就是右邊的值,不能匹配上就是undefined。blog
{ let {name, age} = {name: 'wade', age: 18}; console.log(name, age)//wade 18 } { let {name,...other}={name:'wade',age:12,sex:'male',height:'150'} console.log(name)//wade console.log(other)//{age: 12, sex: "male", height: "150"} }
定義一種新的類型,表示獨一無二的值,最大的用法用來定義惟一的屬性名。
ES6 數據類型除了 Number 、 String 、 Boolean 、 Object、 null 和 undefined ,還新增了 Symbol 。
{ let str1 = Symbol("abc"); console.log(str1)//Symbol(abc) console.log(typeof(str1));symbol let str2 =Symbol("abc"); console.log(str1 == str2)//false }
let name = Symbol("name"); let age = Symbol("age"); { let obj = { [name]: "wade", [age]: 18 } console.log(obj[name],obj[age])//wade 18 console.log(obj.name)//undefined }
注:只能經過obj[symbolName]去取值,不能經過點。
Map 對象保存鍵值對。任何值(對象或者原始值) 均可以做爲一個鍵或一個值。
map.set(key:any,value:any)
用法:
{ let map = new Map(); let str = "key1"; map.set(str, "123"); let obj = {}; map.set(obj, {name: 10}); let bool = true; map.set(bool, 123); let boo=true; map.set(boo,234);//當map中存在此key時,會將原來的值替換 console.log(map.get(str))//123 console.log(map.get(obj))//{name:10} console.log(map.get(bool))//234 console.log(map.get(boo))//234 }
//for...of for (let [key, val] of map) { console.log(key, val) } for (let [key,val] of map.entries()){ console.log(key,val); } for (let key of map.keys()){ console.log(key) } for (let val of map.values()){ console.log(val) }
map.forEach(function (val, key) { console.log(val,key) })
{ let map=new Map(); map.set("k1","wade"); map.set("k2","peter"); //map to array let arr = Array.from(map); /* (2) [Array(2), Array(2)] 0: (2) ["k1", "wade"] 1: (2) ["k2", "peter"]*/ console.log(arr) //array to map let mapFormArr = new Map(arr); /* Map(2) {"k1" => "wade", "k2" => "peter"} [[Entries]] 0: {"k1" => "wade"} 1: {"k2" => "peter"} * */ console.log(mapFormArr) }
Set 對象容許你存儲任何類型的惟一值,不管是原始值或者是對象引用。
Set 對象存儲的值老是惟一的,因此須要判斷兩個值是否恆等。有幾個特殊值須要特殊對待:
{ let set = new Set(); set.add(1); set.add("a"); set.add("a"); set.add({name: "wade"}) console.log(set)//Set(3) {1, "a", {…}} }