如今使用主流的前端框架中,如ReactJS、Vue.js、angularjs等,都會使用到ES6的新特性,做爲一名高級工程師而言,ES6也就成爲了必修課,因此本套課程先以ES6的新特性開始。前端
ES6,是ECMAScript 6的簡稱,它是 JavaScript 語言的下一代標準,己於 2015 年 6 月正式發 布。
它的目標是使 JavaScript語言能夠用於編寫複雜的大型應用程序,成爲企業級開發語言。java
來看下前端的發展歷程:
web1.0時代:
最初的網頁以 HTML爲主,是純靜態的網頁。網頁是隻讀的,信息流只能從服務的到客戶端單向流通。開發人員
也只關心頁面的樣式和內容便可。
web2.0時代:
1995 年,網景工程師Brendan Eich 花了10天時間設計了JavaScript語言。
1996 年,微軟發佈了JScript,實際上是JavaScript的逆向工程實現。
1997 年,爲了統一各類不一樣script腳本語言,ECMA(歐洲計算機制造商協會)以JavaScript爲基礎,制定了
ECMAscript 標準規範。JavaScript和JScript都是 ECMAScript 的標準實現者,隨後各大瀏覽器廠商紛紛實現了
ECMAScript 標準。
因此,ECMAScript是瀏覽器腳本語言的規範,而各類咱們熟知的js語言,如JavaScript則是規範的具體實現。angularjs
var
以前,咱們寫js定義變量的時候,只有一個關鍵字: var
var 有一個問題,就是定義的變量有時會莫名奇妙的成爲全局變量。
例如這樣的一段代碼:
運行打印的結果是以下:
這樣,就把變量的 i的做用域控制在了循環內部
constweb
const 聲明的變量是常量,不能被修改,相似於java中final關鍵字。
編程
在ES6中,爲字符串擴展了幾個新的API:
includes() :返回布爾值,表示是否找到了參數字符串。
startsWith() :返回布爾值,表示參數字符串是否在原字符串的頭部。
endsWith() :返回布爾值,表示參數字符串是否在原字符串的尾部。
實驗一下:
在兩個 `之間的部分都會被做爲字符串的值,能夠任意換行。數組
什麼是解構? – ES6中容許按照必定模式從數組和對象中提取值,而後對變量進行賦值,這被稱爲解構 (
Destructuring)。好比有一個數組:
promise
例若有個person對象:
如過想要用其它變量接收,須要額外指定別名:
瀏覽器
{name:n} :name是person中的屬性名,冒號後面的n是解構後要賦值給的變量。
在ES6中,對函數的操做作了優化,使得咱們在操做函數時更加的便捷。前端框架
在ES6之前,咱們沒法給一個函數參數設置默認值,只能採用變通寫法:
數據結構
ES6中定義函數的簡寫方式:
一個參數時:
代碼不止一行,能夠用 {} 括起來。
ES6中,數組新增了map和reduce方法。
reduce() :接收一個函數(必須)和一個初始值(可選),該函數接收兩個參數:
第一個參數是上一次 reduce處理的結果
第二個參數是數組中要處理的下一個元素
reduce() 會從左到右依次把數組中的元素用reduce處理,並把處理的結果做爲下次reduce的第一個參數。若是是第一次,會把前兩個元素做爲計算參數,或者把用戶指定的初始值做爲起始參數
舉例:
擴展運算符(spread)是三個點(…), 將一個數組轉爲用逗號分隔的參數序列 。
用法:
console.log (...[1, 2, 3]); //1 2 3 console.log(1, ...[2, 3, 4], 5); // 1 2 3 4 5 function add(x, y) { return x + y; } var numbers = [1, 2]; console.log(add(...numbers)); // 3 // 數組合並 let arr = [...[1,2,3],...[4,5,6]]; console.log(arr); //[1, 2, 3, 4, 5, 6] // 與解構表達式結合 const [first, ...rest] = [1, 2, 3, 4, 5]; console.log(first, rest) //1 [2, 3, 4, 5] //將字符串轉成數組 console.log([...'hello']) //["h", "e", "l", "l", "o"]
所謂Promise,簡單說就是一個容器,裏面保存着某個將來纔會結束的事件(一般是一個異步操做)的結果。從語法
上說,Promise 是一個對象,從它能夠獲取異步操做的消息。Promise 提供統一的 API,各類異步操做均可以用一樣
的方法進行處理。
咱們能夠經過Promise的構造函數來建立Promise對象,並在內部封裝一個異步執行的結果。
語法:
示例:
const p = new Promise(function (resolve, reject) { // 這裏咱們用定時任務模擬異步 setTimeout(() => { const num = Math.random(); // 隨機返回成功或失敗 if (num < 0.5) { resolve("成功!num:" + num) } else { reject("出錯了!num:" + num) } }, 300) }) // 調用promise p.then(function (msg) { console.log(msg); }).catch(function (msg) { console.log(msg); })
ES6提供了Set和Map的數據結構。
Set,本質與數組相似。不一樣在於Set中只能保存不一樣元素,若是元素相同會被忽略。和java中的Set集合很是類似。
構造函數:
map,本質是與Object相似的結構。不一樣在於,Object強制規定key只能是字符串。而Map結構的key能夠是任意對象。即:
object 是 <string,object>集合
map 是<object,object>集合
構造函數:
JavaScript 語言的傳統方法是經過構造函數定義井生成新對象。ES6中引入了class的概念,經過class關鍵字自定義
類。
基本用法:
類的繼承:
Generator 函數是 ES6 提供的 一種異步編程解決方案,語法行爲與傳統函數徹底不一樣 。
Generator函數有兩個特徵: 一是 function命令與函數名 之間有一個星號: 二是 函數體內部使用 yield吾句定義不一樣的
內部狀態。
用法:
能夠看到,經過hello()返回的h對象,每調用一次next()方法返回一個對象,該對象包含了value值和done狀態。直到遇到return關鍵字或者函數執行完畢,這個時候返回的狀態爲ture,表示已經執行結束了。
經過for…of能夠循環遍歷Generator函數返回的迭代器。
用法:
修飾器(Decorator)是一個函數, 用來修改類的行爲。 ES2017 引入了這項功能, 目前 Babel 轉碼器己經支持。
使用:
參考地址:https://blog.csdn.net/Marion158/article/details/99219058