es6的九大新特性
一、let和const
let
1.1 let是塊級作用域,聲明的變量只在代碼塊中有效。
1.2let不存在變量提升
var存在變量提升,即在聲明之前使用,值為undefined
其執行順序為
經典面試題:
1.3 let不允許重復聲明
不允許在相同的作用域下,重復聲明同一變量
const
2.1 聲明一個只讀變量,一但聲明值不會再改變。
2.2 聲明變量必須初始化。
2.3 const也是只在塊級級作用域內有效。
2.4 const命令聲明的常量也是不提升。
const本質:const命令聲明的變量的值並不是不得改動的,而是變量執行那個的那個內存地址所保存的數據不得改動 對於數值、字符串數、boolean這種類型的數據的值就保存在變量指向的那個內存地址,因此是常量。
ES6聲明變量的六種方法:
ES5只有兩種聲明變量的方法 var命令和function命令;ES6添加了let命令和const命令,還有import命令和class命令。(import和class 如若有時間后面會進行講解)
二、模板字符串
模板字符串主要用於方便將字符串和變量連接起來,用反引號` `,${}
反引號中放字符串和${],${}括號內寫入需要的引用的變量。
三、箭頭函數
1.1不需要寫function關鍵字
1.2在箭頭函數中this指的是上下文this指向的對象。
1.3當參數只有一個,{}中的代碼只有一行時,可以省略()和{},若果有return也可省略。
四、數組,對象解構
可以將對象中的屬性,數組值進行結構。以便快速獲取數組和對象的值。
五、函數設置默認參數值
六、迭代器iterator,for...of ,for...in
Iterator:是ES6中一種新的遍歷機制;
1. 遍歷器(Iterator)它 是一種接口,為各種不同的數據結構提供統一的訪問機制。
2. Iterator 的作用有三個:
一是為各種數據結構,提供一個統一的、簡便的訪問接口;
二是使得數據結構的成員能夠按某種次序排列;
三是 ES6 創造了一種新的遍歷命令for...of
循環,Iterator 接口主要供for...of
消費。
3. Iterator遍歷的過程:
(1) 創建一個指針對象,指向當前數據結構的起始位置,Iterator的本質就是一個指針對象;
(2)當第一次調用指針對象的next()方法時,指針指向數據結構的第一個元素;
(3)當第二次調用指針對象的next()方法時,指針指向數據結構的第二個元素;
(4)不斷地調用指針對象的next()方法,直到它指向當前數據結構的結束位置;
每一次調用next()方法時,會返回兩個屬性的對象,一個時value和done。value屬性表示當前數據里元素的值,done返回一個boolean值,表示是否遍歷完成。
以下舉一個簡單的例子:
4. Iterator可以遍歷的數據類型:
- Array
- Map
- Set
- String
- TypedArray
- 函數的 arguments 對象
- NodeList 對象
for...of循環
可用於替換for..in和forEach()
for...of 是ES6新引用的循環,一個數據結構只要部署了Symbol.iterator
屬性,就被視為具有 iterator 接口,就可以用for...of
循環遍歷它的成員。也就是說,for...of
循環內部調用的是數據結構的Symbol.iterator
方法。
常用for...of遍歷的數據類型:Map、Set、Array、String等。
Array
有上述可知
for...in遍歷的是鍵名,不能獲得鍵值。for...of遍歷的是鍵值
Set和Map
七、class類的支持
ES6 提供了更接近傳統語言的寫法,引入了 Class(類)這個概念,作為對象的模板。通過class
關鍵字,可以定義類。
基本上,ES6 的class
可以看作只是一個語法糖,它的絕大部分功能,ES5 都可以做到,新的class
寫法只是讓對象原型的寫法更加清晰、更像面向對象編程的語法而已。
八、對象的簡化賦值
當對象的屬性名和變量名一致時可以簡化
九、展開運算符
這個比較簡單上圖: