前端發展的太快了,快到ES6,ES7出來以後,今年已是ES8了,可是縱然前端發展很快,咱們除了快馬加鞭的學習新的技術以外,也要沉下心來,好好的潛心磨礪本身,本文是整理了本身學習ES6以後相關的知識要點,寄但願於書之於筆,一來本身能夠更好地領悟,而來也能夠留做往後翻閱查看。javascript
ES6新增的知識點主要包括變量聲明let以及const,新增類型symbol,模板字符串,語法糖實現類,用於異步調用的promise對象,模塊化,箭頭函數,rest參數以及參數默認值,Set和Map集合,for of循環和迭代器iterator以及Generator等等,能夠看出,ES6較之於ES5仍是有着不少的新增特性,接下來會分爲幾篇文章將其一一介紹。前端
let和constjava
在JavaScript中我們之前主要用關鍵var來定義變量,ES6以後,新增了定義變量的兩個關鍵字,分別是let和constpromise
對於變量來講,在ES5中var定義的變量會提高到做用域中全部的函數與語句前面,而ES6中let定義的變量則不會,let聲明的變量會在其相應的代碼塊中創建一個暫時性死區,直至變量被聲明。bash
//var聲明變量 console.log(x === undefined); // "true" var x = 3; //let聲明變量 console.log(x === undefined); // Uncaught ReferenceError: x is not defined let x = 3;
從上面的代碼能夠看出來,使用let咱們能夠僞造一個代碼塊,終於再也不侷限於函數做用域中,並且對於代碼也會更加的規範,使用let定義變量,提倡人們先定義再使用,否則會報錯。異步
const主要做用於定義常量,並且一旦聲明,初始必須賦值,而且變量值不能更改,不然會報錯模塊化
const CALA; //Missing initializer in const declaration const CALA="calabash519" CALA="hello world"; //Assignment to constant variable.
symbol函數
ES6 之前,咱們知道5種基本數據類型分別是Undefined,Null,Boolean,Number以及String,而後加上一種引用類型Object構成了JavaScript中全部的數據類型,可是ES6出來以後,新增了一種數據類型,名叫symbol,像它的名字表露的同樣,意味着獨一無二,意思是每一個 Symbol類型都是獨一無二的,不與其它 Symbol 重複。學習
能夠經過調用 Symbol()
方法將建立一個新的 Symbol 類型的值,這個值獨一無二,不與任何值相等。rest
var mySymbol=Symbol(); console.log(typeof mySymbol) //"symbol"
其餘類型能夠被強制轉換成字符串,可是Symbol 卻不能,千萬不要這麼作,否則會報錯,提示TypeError。
可使用Symbol來定義對象的屬性,並且當Symbol做爲屬性名的時候,必須用[]來進行調用而不是點操做符。
var obj = {}; var mySymbol = Symbol(); obj[mySymbol] = "calabash519"; console.log(obj[mySymbol]); //calabash519 console.log(obj.mySymbol); //undefined
Symbol還可使 instanceof 可擴展,在 ES6 中,object instanceof constructor
表達式被標準化爲構造函數的一個方法:constructor[Symbol.hasInstance](object)
,這意味着它是可擴展的。
模板字符串
字符串是JavaScript中基本類型之一,應該算是除了對象以外是使用最爲頻繁的類型吧,字符串中包含了例如substr,replace,indexOf,slice等等諸多方法,ES6引入了模板字符串的特性,用反引號來表示,能夠表示多行字符串以及作到文本插值(利用模板佔位符)。
// 之前的多行字符串咱們這麼寫: console.log("hello world 1\n\ hello cala"); // "hello world // hello cala" //有了模板字符串以後 console.log(`hello world string text line 2`); // "hello world // hello cala"
能夠用${}來表示模板佔位符,能夠將你已經定義好的變量傳進括弧中,例如:
var name="cala"; var age=22; console.log(`hello,I'am ${name},my age is ${age}`) //hello,I'am cala,my age is 22
上述是個很簡單的例子,展現了模板字符串和模板佔位符的基本用法,對比與普通字符串,模板字符串能夠更好地支持自動轉義特殊的字符串,也能夠在其內嵌套控制語句,使得代碼的邏輯更加清晰。