電梯 原文 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 字符串補全
數值擴展

二進制 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;
數組擴展

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() 數組是否包含給定的值
函數擴展

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 尾遞歸
對象擴展

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
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。