es6 基礎學習

Es6(剩余參數---擴展運算符):? …代替了es5的arguments

一、剩余運算符(…)? 用法例:? 把多個獨立的字段合并到一個數組中

//obj 接收的是 book參數, …keys接收的是其余參數

function pick(obj, …keys){

}

let book = {

????title: 'es6教程',

????author: '張三',

????year: 2022

}

let bookData = pick(book, 'title', 'year');

二、擴展運算符(…) 用例: 將一個數組分割,并將各個項作為分離的參數傳給函數

const arr = [10,20,30,40,50,70,60];

console.log(Math.max(…arr)); //找到數組中最大的值

三、箭頭函數注意事項

1、使用箭頭函數,函數內部沒有 orguments

2、箭頭函數不能是要 new關鍵字來實例化對象(function函數是一個對象,但是箭頭函數不是一個對象,它是一個函數的語法糖---表達式)

四、結構賦值: 結構賦值是對賦值運算符的一種擴展,主要針對 數組和對象 來進行操作

對象的拓展方法:

is()? 等價于 === :比較兩個值是否嚴格相等(值與數據類型)

用法:

console.log( Object.is(NaN,NaN) )

assign()? :對象的合并

用法:

? let obj = {c: 11,d: 12,e: 13};

? Object.assign(obj,{a:1,b:2})

五、symbol類型: 原始數據類型 Symbol,他表示是獨一無二的值(內存地址不一樣)

通過Symbol定義值,表示變量是獨一無二的

最大用途:用來定義對象的私有變量

const name1 = Symbol('name');

const name2 = Symbol('name');

console.log(name1 === name2)? ? //false

let s1 = Symbol('s1');

let obj={

????[s1]: '謝小胖'

};

//如果用Symbol 定義的對象中的變量,取值時一定要用 [變量名]

console.log(obj[s1]);

如何獲取Symbol聲明的屬性名(對象的key)

1、Object.getOwnPropertySymbols(obj)

2、Reflect.ownKeys(obj)

六、Map 和 Set

Set:(集合,表示無重復值的有序列表)

let set1 = new Set();

set1.add(2); //添加元素

set1.add(3);

set1.delete(2); //刪除元素

set1.has(3); //校驗某個值是否在set1中

set1.size(); //校驗set1的長度

// 循環 --- 一般不用forEach

set1.forEach((val,key)=>{

????console.log(val);

????console.log(key)

})

//將set轉為數組操作

let set2 = new set([1,2,3,4,5,6]);

let arr = [ …set2];

Map:是鍵值對的有序列表,鍵和值可以是任意類型

let map1 = new Map();

map1.set('name': '張三'); //添加參數

map1.get('name') //取map1中name的值

map1.has('name')? //校驗某個值是否在map1中

map1.delete('name')? //刪除

map1.clear()? //清空

七、數組的拓展功能

數組的方法: from()? 和? of()

from()? 將偽數組轉換為真正的數組

例子:?

function add (){

????let lis = Array.from(arguments); //或者使用擴展運算符 let arr = […arguments];

?}

?add (1,2,3)

from() 還可以接受第二個參數,用來對每個元素進行處理

let liContent =? Array.from(lis, ele =>ele.textContent);

of()? 將一組值,轉為數組

Array.of(3,11,23,[1,2,3],{id: 1,name: '張三'});

copyWithin()? 當前數組內部,將指定位置的成員復制到其他位置(會覆蓋原有成員),然后返回當前數組

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

find()---查找元素,返回第一個符合條件的數據;? ? findIndex()----查找索引,返回第一個符合條件的索引

[1,-20,2,4,10,-10].find((n)=>{

????return? n < 0

})

[1,-20,2,4,10,-10].findIndex( (n) => n < 0)

keys()---對鍵名的遍歷;? values()---對值的遍歷;entries()---對健值的遍歷;? 返回一個遍歷器,可以使用循環進行遍歷

includes() 返回一個布爾

值,表示某個是否包含某個給定的值;indexOf(),返回值為-1則不存在,否則存在

[1,2,3,5].includes(2) //true

[1,2,3,5].includes(6) //false

[1,2,3,5].indexOf(2) //1? ?

[1,2,3,5].indexOf(6) //-1

八、迭代器? Iterator ----- 是一種新的遍歷機制,兩個核心:

1、迭代器是一個接口,能快捷的訪問數據,通過Symbol創建迭代器,通過迭代器的next()方法獲取迭代之后的結果;

2、迭代器是用于遍歷數據結構的指針(數據庫的游標)

const items = ['one' , 'two' , 'three'];

const item = items[Symbol.iterator]();

console.log(item.next());

console.log(item.next());

console.log(item.next());

console.log(item.next());

{value: 'one', done: false}

{value: 'two', done: false}

{value: 'three', done: false}

{value: undefined, done: true}

返回的done如果為false標識遍歷可繼續,如果為true,則表示遍歷結束

九、生成器 generator函數,可以通過yield關鍵字,將函數掛起,為了改變執行流提供了可能,同時為了做異步編程提供了方案。

與普通函數的區別

1、function后面 函數名之前 有個 *

2、只能在函數內部使用yield表達式,讓函數掛起

function*? func(){

????yield 1;

????yield 3;

????yield 4;

}

func()

function*? func(){

????console.log('one');

????yield 1;

????console.log('two');

????yield 3;

????console.log('end');

}

let fn = func();

console.log(fn.next());

console.log(fn.next());

console.log(fn.next());

總結: generator函數是分段執行的,yield語句是暫停執行,而next()是恢復執行

function* add(){

console.log('statr');

//x 可真的不是yield '2' 的返回值,他是next()調用 恢復當前yield()執行傳入的實參

let x = yield '2';

console.log('one:'+x);

let y = yield '3';

console.log('two:'+y);

return x+y

}

const fn = add();

console.log(fn.next());

console.log(fn.next(20));

console.log(fn.next(30));

使用場景: 為不具備Interator接口的對象提供了遍歷操作

十、Generator 生成器的應用? 部署ajax操作,讓異步代碼同步化

回調地獄

a. 用生成器解決 請求完后繼續請求,請求完后又繼續請求

十一、Promise 對象?

相當于一個容器,保存著未來才會結束的事件(異步操作)的一個結果

各種異步操作都可以用同樣的方法進行處理

特點:?

? ? 1、對象的狀態不受外界影響,處理異步操作三個狀態: pending(進行中),resolved(成功),rejected(失敗)

? ? 2、一旦狀態改變,就不會再變。任何時候都可以得到這個結果

? ? resolved()能將現有的任何對象轉換成promise對象

十二、async----await: 使得異步操作更加方便

? ? ? 基本操作 async 它會返回一個promise對象? then? catch

? ? ? async 是 Generator(生成器) 的一個語法糖

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

推薦閱讀更多精彩內容