1. 程式人生 > >對ES6的一次小梳理

對ES6的一次小梳理

今天閒的沒事回顧了ES6的一些知識,下面寫的不是特別詳細,只是類似於一個大綱,今天我竟然敢睡到八點起床了,md,我膨脹了,趕緊寫篇部落格壓壓驚

下面來看看ES6給我們提供了哪些新東西

(1)新的變數宣告方式let/const(不具備變數提升,不可重複宣告)     let:宣告的變數僅在塊級作用域內有效     const:常量,值一旦定義不可更改;宣告時要賦初值 (2)解構賦值:物件/陣列賦值     物件賦值:物件根據屬性名一一對應,無序對應         首先有這麼一個物件const props = {             className: 'tiger-button',             loading: false,             clicked: true,             disabled: 'disabled'             }         // es5         var loading = props.loading;         var clicked = props.clicked;         // es6         const { loading, clicked } = props;     陣列賦值:陣列以序列號一一對應,有序對應;允許指定預設值;內部使用嚴格相等運算子(===)         // es6         const arr = [1, 2, 3];         const [a, b, c] = arr;         // es5         var arr = [1, 2, 3];         var a = arr[0];         var b = arr[1];         var c = arr[2]; (3)字串的遍歷:for...of迴圈遍歷
        for(let codePointAt of 'hicai'){         console.log(codePointAt);         }  // h i c a i         遍歷物件用for...in (4)箭頭函式:         // es5 寫法         var fn = function(a, b) {           return a + b;         }         // es6 箭頭函式寫法,當函式直接被return時,可以省略函式體的括號{}         const fn = (a, b) => { a + b }
;  // {}可以省略         箭頭函式可以替換函式表示式,但是不能替換函式宣告;         箭頭函式本身沒有this,其中的this指的是外層的this;         箭頭函式不可以使用arguments物件,該物件在函式體內不存在;         不可以使用yield命令,因此箭頭函式不能用作Generator函式。 (5)字串模板:為了解決+號拼接字串的不便利。用 ` `包裹字串,在其中用${}包裹變數或表示式。         // es6const a = 20;const b = 30;const string = `${a}+${b}=${a+b}`;         // es5var a = 20;var b = 30;var string = a + "+" + b + "=" + (a + b); (6)展開運算子:(提高程式碼效率)
        ES6中用...來表示展開運算子,可以將陣列方法或者物件方法進行展開;         陣列:             const arr1 = [1, 2, 3];             const arr2 = [...arr1, 10, 20, 30];             // 這樣,arr2 就變成了[1, 2, 3, 10, 20, 30];         物件:             const obj1 = {a:1,b:2,c:3}             const obj2 = {             ...obj1,  d: 4,  e: 5,  f: 6         }         // 結果類似於 const obj2 = Object.assign({}, obj1, {d: 4}) (7)class:         在js中,每個物件都有原型物件,所有js物件都從原型上繼承方法和屬性;         ES5中,屬性放在建構函式constructor裡,方法放在原型prototype上;         ES6中引入類class來代替建構函式constructor;還提供了extends劃分super關鍵字; (8)promise物件:解決非同步程式設計         特點:a)物件的狀態不受外界影響,promise物件代表一個非同步操作,有三種狀態:pending(進行中)、resolve(成功)、rejected(失敗)         一旦狀態改變,就不會改變         基本用法:         Promise建構函式的兩個引數是resolve和reject;         Promise例項生成後,可以用then方法分別制定resolve和rejected狀態的回撥函式;         Promise的then方法是定義在原型物件Promise.prototype上的,then方法返回的是一個新的Promise例項,不是原來那個Promise例項,因此可以用鏈式寫法;         方法1:Promise.all()方法用於將多個promise例項包裝成一個新的promise例項;         方法2:Promise.race()方法只要有一個peomise執行完畢就執行 (9)模組化CommonJs (10)陣列新API:         Array.from()方法可以將偽陣列轉為陣列   Array.of()將一組數字轉化為陣列 (11)Set和Map資料結構:         Set             a)Set例項成員值唯一儲存key值,map例項儲存鍵值對(key-value)             b)Set例項的方法分為兩大類:操作方法(用於操作資料)和遍歷方法(用於遍歷成員)。             操作方法:                 add(value):新增某個值,返回Set結構本身                 delete(value):刪除某個值,返回布林值                 has(value):返回布林值,表示該值是否為Set的成員                 clear():清除所有成員,沒有返回值             遍歷方法:                 keys():返回鍵名                 values():返回鍵值                    entries():返回鍵值對                 forEach():使用回撥遍歷每個成員        Map               a)Map的鍵實際上是跟記憶體地址繫結的,只要記憶體地址不一樣,就視為兩個鍵;             b)Map例項的屬性和操作方法:                 size屬性:返回Map結構的成員總數;                 set(key, value):設定鍵名key對應的鍵值為value,然後返回整個Map結構,若key已有值,則更新鍵值,否則生成該鍵。                 get(key):讀取key對應的鍵值                 has(key):返回布林值,表示某個鍵是否存在當前map物件中。                 delete(key):刪除某個鍵,返回true,刪除失敗返回false                 clear():其清除所有成員,沒有返回值             c)map的遍歷方法:                 keys():返回鍵名                 values:返回鍵值                 entries:返回所有成員                 forEach():遍歷map的所有成員,map的遍歷順序就是插入順序 (12)Symbol:新的資料型別,表示獨一無二的值,不會與其他屬性名產生衝突;             Symbol值通過Symbol函式生成;             let s = Symbol();             typeof s;    // “symbol”             Symbol函式前不能使用new命令,             Symbol值不是物件,所以不能新增屬性;             Symbol函式可以接受一個字串為引數,表示對當前Symbol例項的描述,因此相同引數的Symbol函式的返回值是不相等的;