es6

解構

解構賦值的規則是,只要等號右邊的值不是對象,就先將其轉為對象。由于undefined和null無法轉為對象,所以對它們進行解構賦值,都會報錯。

解構函數的用途

1 交換變量值

[x,y] = [y,x]

2 從函數返回多個值

var {foo,bar} = example( );

3 函數參數的定義
4 提取Json數據

var jsonData = { id: 42, status: "OK", data: [867, 5309]};
let { id, status, data: number } = jsonData;
console.log(id, status, number);// 42, "OK", [867, 5309]

5 函數參數的默認值
6 遍歷map結構

var map = new Map( );
map.set('first','hello');
map.set('second','hello');
map.set('third','hello');
map.set('fourth','hello');
for(let[key,value] of map){
     //獲取到鍵值對
}
for(let [key] of map){
    //獲得鍵名
}
for(let [,value] of map){
    //獲得鍵值
}

7 輸入模塊的指定方法

const { SourceMapConsumer, SourceNode } = require("source-map");

正則擴展

at相當于charAt() ,可以識別中文
normarize()
includes() , startsWith() , endsWith()
repeat(n) //n為重復次數
padStart, padEnd 字符串補全

數值擴展

屏幕快照 2016-10-05 08.02.35.png

二進制 0b, 八進制0o
Number.isInteger(25.0) // true
Number.EPSILON

function withinErrorMargin (left, right) { 
  return Math.abs(left - right) < Number.EPSILON;
}
withinErrorMargin(0.1 + 0.2, 0.3)
// true
withinErrorMargin(0.2 + 0.2, 0.3)
// false

Math.trunc(4.1) //去除小數部分
Math.sign() //判斷正負數/0
Math.cbrt() //立方根
Math.fround() //返回數值的單精度浮點數形式
...
還有一些關于對數方法,三角函數方法
指數運算符: a**=2; // a= a * a;

數組擴展

屏幕快照 2016-10-05 08.26.50.png

1 對象轉數組

//es5 對象轉數組: 
 var arr1 = [].slice.call(arrayLike);
//es6 對象轉數組,適用于數組對象和可遍歷對象Map,Set
 let arr2 = Array.from(arrayLike);

2 Array.of(值1,值2,值3) 將一組值轉換為數組
等價于es5
var arr1 = [].slice.call(arguments);
3 copyWithin(target,start,end)
target(必需):從該位置開始替換數據。
start(可選):從該位置開始讀取數據,默認為0。如果為負值,表示倒數。
end(可選):到該位置前停止讀取數據,默認等于數組長度。如果為負值,表示倒數。

[1, 2, 3, 4, 5].copyWithin(0, 3) // [4, 5, 3, 4, 5]

4 find(回調函數)

//返回符合條件的值
[1, 4, -5, 10].find((n) => n < 0) // -5

findIndex

//返回符合條件的第一個索引
[1, 5, 10, 15].findIndex(function(value, index, arr) { 
   return value > 9;
})
 // 2

5 fill( ) 使用給定值填充一個數組
6 entries(),keys()和values()——用于遍歷數組
7 includes() 數組是否包含給定的值

函數擴展

屏幕快照 2016-10-05 08.52.52.png

1 函數參數設置了默認值,length失效
2 rest參數 ...變量名 用于獲取函數多余的參數
3 ...替換apply

// ES5的寫法
function f(x, y, z) {  
  // ...
}
var args = [0, 1, 2];
f.apply(null, args);
// ES6的寫法
function f(x, y, z) {  
  // ...
}
var args = [0, 1, 2];
f(...args);
//字符串轉數組
[...'hello']    // ["h","e","l","l","o"]

4 函數的name屬性
5 箭頭函數
箭頭函數有幾個使用注意點。
(1)函數體內的this對象,就是定義時所在的對象,而不是使用時所在的對象。
(2)不可以當作構造函數,也就是說,不可以使用new命令,否則會拋出一個錯誤。
(3)不可以使用arguments對象,該對象在函數體內不存在。如果要用,可以用Rest參數代替。
(4)不可以使用yield命令,因此箭頭函數不能用作Generator函數。
上面四點中,第一點尤其值得注意。this對象的指向是可變的,但是在箭頭函數中,它是固定的。
6 函數綁定
obj::bind() 方法綁定在對象上
7 尾調用

function outter(x){
  return inner(x);
}

8 尾遞歸

對象擴展

屏幕快照 2016-10-05 09.32.21.png

Object.is
就是部署這個算法的新方法。它用來比較兩個值是否嚴格相等,與嚴格比較運算符(===)的行為基本一致。

+0 === -0 //true
NaN === NaN // false
Object.is(+0, -0) // false
Object.is(NaN, NaN) // true

Object.assign
方法用于對象的合并,將源對象(source)的所有可枚舉屬性,復制到目標對象(target)。
淺拷貝

ES6一共有5種方法可以遍歷對象的屬性。

(1)for...in
for...in循環遍歷對象自身的和繼承的可枚舉屬性(不含Symbol屬性)。
(2)Object.keys(obj)
Object.keys返回一個數組,包括對象自身的(不含繼承的)所有可枚舉屬性(不含Symbol屬性)。
(3)Object.getOwnPropertyNames(obj)
Object.getOwnPropertyNames返回一個數組,包含對象自身的所有屬性(不含Symbol屬性,但是包括不可枚舉屬性)。
(4)Object.getOwnPropertySymbols(obj)
Object.getOwnPropertySymbols返回一個數組,包含對象自身的所有Symbol屬性。
(5)Reflect.ownKeys(obj)
Reflect.ownKeys返回一個數組,包含對象自身的所有屬性,不管是屬性名是Symbol或字符串,也不管是否可枚舉。
以上的5種方法遍歷對象的屬性,都遵守同樣的屬性遍歷的次序規則。
首先遍歷所有屬性名為數值的屬性,按照數字排序。
其次遍歷所有屬性名為字符串的屬性,按照生成時間排序。
最后遍歷所有屬性名為Symbol值的屬性,按照生成時間排序。

Symbol

Proxy和Reflect

Set和Map

Iterator和 for...of

Generator函數

function* generator(){
  yield 1;
  yield 2;  
  yield 3;
  return 4;
}
generator.next() // { value: 1, done: false }
generator.next()// { value: 2, done: false }
generator.next()// { value: 3, done: false }
generator.next()// { value: 4, done: true }

Promise對象

一個用Promise對象實現的Ajax操作的例子。

var getJSON = function(url) { 
  var promise = new Promise(function(resolve, reject){ 
    var client = new XMLHttpRequest(); 
    client.open("GET", url); 
    client.onreadystatechange = handler;      
    client.responseType = "json";       
    client.setRequestHeader("Accept", "application/json");     
    client.send(); 
    function handler() { 
      if (this.readyState !== 4) { 
        return; 
      } 
      if (this.status === 200) { 
        resolve(this.response); 
      } else { 
        reject(new Error(this.statusText)); 
      } }; });   
    return promise
;};
getJSON("/posts.json")
  .then(function(json) { 
      console.log('Contents: ' + json);
   }, function(error) { 
      console.error('出錯了', error);
   });

getJSON是對XMLHttpRequest對象的封裝,用于發出一個針對JSON數據的HTTP請求,并且返回一個Promise對象。需要注意的是,在getJSON內部,resolve函數和reject函數調用時,都帶有參數。

異步操作和Async

Class

Decorator 裝飾器

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容

  • 1.屬性的簡潔表示法 允許直接寫入變量和函數 上面代碼表明,ES6 允許在對象之中,直接寫變量。這時,屬性名為變量...
    雨飛飛雨閱讀 1,146評論 0 3
  • 屬性的簡潔表示法 ES6允許直接寫入變量和函數,作為對象的屬性和方法。這樣的書寫更加簡潔。 上面代碼表明,ES6允...
    呼呼哥閱讀 2,940評論 0 2
  • 三,字符串擴展 3.1 Unicode表示法 ES6 做出了改進,只要將碼點放入大括號,就能正確解讀該字符。有了這...
    eastbaby閱讀 1,561評論 0 8
  • [TOC] 參考阮一峰的ECMAScript 6 入門參考深入淺出ES6 let和const let和const都...
    郭子web閱讀 1,807評論 0 1
  • 看這本書是在markdown在做的筆記,更友好的閱讀方式訪問: github es6.md(https://git...
    汪汪仙貝閱讀 473評論 0 0