es6 | 新增語法 | 總結


電梯 原文 https://www.jianshu.com/p/5f40c43c6f85

重點:

6 遍歷map結構

正則擴展

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

========

Math

Math.trunc(4.1) //去除小數部分 等同:向下取整
Math.sign() //判斷正負數/0
Math.cbrt() //立方根
Math.fround() //返回數值的單精度浮點數形式

========

1 對象轉數組

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

2 Array.of(值1,值2,值3) 將一組值轉換為數組
3 copyWithin(target,start,end)

4 find(回調函數)返回原值 、findIndex(回調函數) 返回索引

5 fill( ) 全部填充 覆蓋

6 entries(),keys()和values()——用於遍歷數組
7
includes() 數組是否包含給定的值

 

 

 

解構

解構賦值的規則是,只要等號右邊的值不是對象,就先將其轉為對象。由於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 裝飾器



作者:Bookish倩寶
鏈接:https://www.jianshu.com/p/5f40c43c6f85
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM