數(shù)組的拓展方法:
arr.keys()方法: 獲取數(shù)組的所有索引值?chrome沒有實現(xiàn)
arr.values()方法: 獲取數(shù)組的所有成員值chrome沒有實現(xiàn)
arr.entries()方法:
作用: ? 獲取數(shù)組所有索引值以及成員值
返回: ?數(shù)組迭代器對象
使用for fo方法遍歷此對象可獲得數(shù)組
第一個成員表示索引值
第二個成員表示成員值
數(shù)組迭代器特征:
遍歷數(shù)組迭代器內(nèi)容,?只能使用for of方法, ?for循環(huán), ?for in無效
可以通過next方法包含每一個值的對象
數(shù)組迭代器只能被獲取一次
jq中的extend(any)方法:
作用: jQuery中復(fù)制對象的方法
參數(shù): @any ? ?如果是true表示深復(fù)制(此時后面的參數(shù)表示需要復(fù)制的對象,可多個), ? 如果是對象表示淺復(fù)制
返回值: ?復(fù)制的對象(如果復(fù)制的是多個對象, ?多個對象會合并到一起)
window.assign(obj1, ?obj2...)方法: ? (淺復(fù)制)
作用: 擴(kuò)展對象, 將別的對象的值復(fù)制給目標(biāo)對象
參數(shù):
@obj1 ? ?目標(biāo)對象
@obj2... 被復(fù)制的對象(可多個) ??
返回值: ?拓展后的目標(biāo)對象(@obj1), 若有同名屬性, 后面的覆蓋前面的
Symbol數(shù)據(jù)類型: ? ? ?ES6新增數(shù)據(jù)類型
應(yīng)用: ??為一個庫添加屬性魏烫、方法, ?是很危險的,原因新增的屬性崔兴、方法可能會替換掉原有的屬性或者方法五督,原理就是名稱可能會同名藏否,es6新增symbol數(shù)據(jù)類型是為了解決這個問題,通過symbol新增的屬性是永遠(yuǎn)不會同名的
使用Symbol類型的值不會被覆蓋:
語法: var ?key = ?Symbol(value)
注意: ?一旦通過Symbol類型為對象添加屬性, 訪問這個屬性值,?只能通過變量名訪問
例如: ?{Symbol(value): "red"}, ??
訪問屬性值只能使用obj[key], ?key表示Symebol(value)的變量名
obj[Symbol(value)]?這種寫法訪問不到該屬性
應(yīng)用: ? 不允許用戶直接訪問一些隱私數(shù)據(jù), 而是通過代理對象訪問, 通過代理對象屏蔽一些危險操作.
創(chuàng)建代理對象:?new Proxy(obj, configObj)? ??
@obj ?被代理的對象
@dealObj ? 處理代理對象的接口方法對象
get(obj, ?key) ? ?用戶獲取對象屬性時的處理方法
@obj ? ?被代理的對象
@key ? ?獲取的屬性名
set(obj, key, value) ? 用戶設(shè)置對象屬性時的處理方法
@obj ? 被代理的對象
@key ? 被設(shè)置的對象屬性名稱
@value ?用戶設(shè)置的屬性值?
ES6允許我們在參數(shù)中使用賦值符號充包,定義默認(rèn)參數(shù)
例如: ? function drawColor(color?=?'green'){}
應(yīng)用: ?箭頭函數(shù)中不能使用arguments, ?可以使用...arg語法代替
語法:?...arg
例如: ?function ?drawColor(color1, color2, ...color){}
前面的參數(shù)可以正常使用
獲取的color變量是一個數(shù)組
解構(gòu)對象:
作用: ?直接使用變量名調(diào)用對象的屬性
語法:?var {屬性名稱} = 對象
大括號內(nèi)的屬性名稱必須要與對象的屬性名稱一致
例如: ?var {Model, Controller, View} = Backbone;
解構(gòu)數(shù)組:
作用: 可以將一個數(shù)組的每個成員轉(zhuǎn)化成函數(shù)參數(shù)
語法: ?var [變量1, 變量2, ...變量們] = 數(shù)組
每個變量表示一個成員
如果想獲取所有剩余成員可以使用...語法,獲得的是一個數(shù)組
例如: var [color1, color2, ...color] = ["red", "green", "blue", "pink"] ;
定義語法:??() => {}? ??
() 內(nèi)定義參數(shù)集合
=>箭頭
{} 函數(shù)體
特征:
不能使用arguments
作用域和箭頭函數(shù)所在的作用域一致
不能作為構(gòu)造函數(shù)使用(因為第二條)
省略:
只有一個參數(shù), 小括號可以省略
函數(shù)體只有返回值, 大括號可以省略, return可以省略
更改作用域: ?只能更改箭頭函數(shù)所在的作用域, 來達(dá)到更改箭頭函數(shù)作用域的目的
ES6中聚合類數(shù)據(jù)一共有四種: 數(shù)組副签、對象、set對象基矮、map對象
創(chuàng)建set對象:
語法:new Set(arr);
參數(shù): ?@arr是一個數(shù)組, 會自動對數(shù)組中每一個成員去重
返回: ?set實例化對象
add(any)方法:
作用: ?為set對象添加成員
參數(shù): ?只能接收一個參數(shù), 表示添加的成員, ?會自動去重
返回值: ? set對象, 因此可以鏈?zhǔn)秸{(diào)用
delete(any)方法:
作用: ?刪除set對象的成員
參數(shù): 只能接收一個參數(shù), 表示刪除的成員
返回值: ?布爾值, true表示刪除成功
has(any)方法:
作用: ?查詢是否擁有某個成員
參數(shù): ?只能接收一個參數(shù), 表示查詢的成員
返回值: 布爾值, true表示存在
clear()方法:
作用: 清空set對象
forEach(fn)方法:?此方法的回調(diào)函數(shù)的參數(shù)和全局的forEach不一樣
作用: 遍歷set對象
參數(shù): ?@fn 回調(diào)函數(shù)
參數(shù)1 ?表示值
參數(shù)2 ?表示值
參數(shù)3 ?表示set對象
返回值: ?undefined
size()方法: ?獲取對象長度
set對象實現(xiàn)了迭代器接口, 所以可以通過for of遍歷
WeakSet對象:?弱set對象, 因為不能被內(nèi)存回收機(jī)制回收, 所以不建議使用
作用: ?Map對象是對象的擴(kuò)展,?允許屬性名稱是任何類型, 如: null淆储、undefined、數(shù)字等等
創(chuàng)建Map對象:
語法:new Map()
對象方法:
set(key, value)方法:
作用: 為map對象添加新屬性
參數(shù): @key ?屬性名稱 ?@value ?屬性值
返回值: ?map對象, 因此可以鏈?zhǔn)秸{(diào)用
get(key)方法:
作用: 獲取map對象中某個屬性值
參數(shù): @key 屬性名稱
返回值: ?@key的屬性值
clear()方法: 清空map對象
has(key)方法:
作用: ?判斷某個屬性值是否存在
參數(shù): ?@key ?屬性名稱
返回值: ?布爾值, ?true表示存在
delete(key)方法:
作用: 刪除謳歌屬性值
參數(shù): @key ?屬性名稱
返回值: 布爾值, ?true表示刪除成功
forEach(fn)方法:
作用: 遍歷map對象
參數(shù): @fn ?回調(diào)函數(shù)
參數(shù)1 ? value
參數(shù)2 ? key
參數(shù)3 ? map對象
作用域: ?全局
size(): ?獲取長度
WeakMap對象:弱map對象, 不能被內(nèi)存回收機(jī)制回收, 少用
ES6中實現(xiàn)了迭代器接口, 但是沒有實現(xiàn)迭代器對象Iterator
迭代器應(yīng)用:
數(shù)據(jù)解構(gòu)愈捅、數(shù)組解構(gòu)遏考、對象解構(gòu)
定義map對象、set對象
使用for of循環(huán)
實現(xiàn)了迭代器接口的數(shù)據(jù)(實現(xiàn)迭代器接口的特征是能否實現(xiàn)for of循環(huán))
作用: ? 儲存狀態(tài)
語法: ?function * 函數(shù)名稱() {}
定義狀態(tài):
語法: yield ?狀態(tài)內(nèi)容;
每一個yield定義一個狀態(tài), 最后一個狀態(tài)用return定義
函數(shù)運行后得到一個狀態(tài)對象:
狀態(tài)對象實現(xiàn)了迭代器接口, 因此可以通過for of循環(huán)遍歷, 但遍歷不到最后一個狀態(tài)(return)
可以使用next訪問狀態(tài)
返回值: 一個對象
done表示是否完成遍歷
value表示狀態(tài)的值
例子:
// 定義generator函數(shù)
function?*?dayState?()?{
// 定義狀態(tài)
yield?'睜眼';
yield?'砸鬧鐘';
yield?'接著再睡';
yield?'再睜眼';
yield?'起來了';
yield?'上學(xué)';
yield?'學(xué)習(xí)';
// 睡覺是最后一個狀態(tài)
return?'睡覺';
}
// 使用generator函數(shù)必須執(zhí)行
var?ds?=?dayState();
// 訪問狀態(tài)
console.log(ds.next())
作用:?將一部操作轉(zhuǎn)化成同步的寫法
promise對象內(nèi)部維護(hù)一個狀態(tài), ?有三種情況:
rending ? ?異步執(zhí)行的操作還沒有接觸
resolved ? 異步操作已經(jīng)執(zhí)行完成
rejected ? ?異步操作執(zhí)行失敗
promise三種情況, 只能存在兩種狀態(tài)的轉(zhuǎn)化, ?因此只能出現(xiàn)兩個狀態(tài):
pending ?進(jìn)入 resolved, ?異步操作執(zhí)行成功
pending ?進(jìn)入 rejected, ? 異步操作執(zhí)行失敗
創(chuàng)建對象:?new Promise(fn);
參數(shù): @fn ?回調(diào)函數(shù)
參數(shù)1(一般命名為resolve) ?用來將pending狀態(tài)轉(zhuǎn)換成resolved狀態(tài)
參數(shù)2(一般命名為reject) ? ? 用來將pending狀態(tài)轉(zhuǎn)換成rejected狀態(tài)
作用域: ?全局
在回調(diào)函數(shù)中執(zhí)行異步操作,當(dāng)執(zhí)行完畢, 會觸發(fā)相應(yīng)的狀態(tài)改變
可以在promise實例化對象中通過then方法綁定回調(diào)函數(shù)
then(successFn, errFn)方法:
作用: ?觸發(fā)狀態(tài)是做的事
參數(shù):
@successFn成功時執(zhí)行的回調(diào)函數(shù)
@errFn ? ? ? ? ? ?失敗時執(zhí)行的回調(diào)函數(shù)
這兩個回調(diào)函數(shù)的參數(shù)是執(zhí)行resolve或reject方法時傳遞的參數(shù)
all方法:
作用: ?監(jiān)聽多個允諾對象
如果一個失敗了就立即執(zhí)行失敗回調(diào)函數(shù)
如果都成功了, 執(zhí)行成功時的回調(diào)函數(shù)