陣列的擴充套件 ES6重刷08

2021-09-28 06:33:32 字數 3395 閱讀 4148

在此我會著重講擴充套件運算子【三點運算子】,結合對於陣列的一些便捷操作及深拷貝;其次講講array例項的某些新的方法及注意事項【略帶iterator介面個返回值為iterator遍歷器物件的genrator函式function *() {}】;最後講講哪些資料結構存在內建部署的iterator介面,而對於沒有內建部署的iterator介面的資料結構,怎末進行自定義的iterator介面部署。

一、擴張運算子【三點運算子】

1、適用於那些資料結構?

首先總的來說三點運算子是解包物件,為什麼能解包呢,是因為利用了被解包物件中的遍歷器,也就是iterator介面,(至於為什麼object資料結構並沒有內建的iterator介面,卻可以被三點運算這點我也還未清楚【若有大佬清楚,還望點明小弟,在此不勝感激】),這就說明擁有內建iterator介面的資料結構就可以被三點運算子解包。

好現在我們明白了能被三點運算子解包的資料結構有內建iterator介面這一特點(除了oobject),那我們就來說說那些資料結構存在內建的iterator介面

原生具備 iterator 介面的資料結構如下。

array

mapset

string

typedarray

函式的 arguments 物件

nodelist 物件// 類似document.queryselectorall('div')

由於我們這次是陣列的擴充套件,我們就講講三點運算子為陣列的操作帶來了哪些便捷

便捷一、對陣列的增

const arr1 =[1

,2,3

]let test =

[...arr1 ,4]

console.

log(

'test'

, test)

// [1, 2, 3, 4]在這裡插入**片

便捷

二、對陣列的copy

1、當原陣列內部的元素為基本資料型別【undefined、null、string、number、boolean】時,對陣列的拷貝為深拷貝

const arr1 =[1

,2,3

]const test =

[...arr1]

test[0]

=111

console.

log(

'test'

, test)

// [111, 2, 3]

console.

log(

'arr1'

, arr1)

// [1, 2, 3]

2、當原陣列的內部元素存在引用資料型別【object、array、function】時,對陣列的拷貝為淺拷貝

let arr =[1

,2,[

1,2,

3]]const test =

[...arr]

arr[2]

= object.

assign

(arr[2]

,[4,

5,6]

)console.

log(test)

// [1, 2, [4, 5, 6]]

便捷

三、合併陣列

const arr1 =[1

,2,3

]const arr2 =[4

,5,6

]const test =

[...arr1,

...arr2]

console.

log(

'test'

, test)

// [1, 2, 3, 4, 5, 6]

便捷

四、配合解構解析

const

=const

[ arrayfirst,

...arrayrest ]=[

1,2,

3,4,

5]console.

log(

'objectfirst'

, objectfirst)

// first

console.

log(

'objectrest'

, objectrest)

//

console.

log(

'arrayfirst'

, arrayfirst)

// 1

console.

log(

'arrayrest'

, arrayrest)

// [2, 3, 4, 5]

二、擴充套件運算的解包和打包【當用於函式傳參時】

const

firsttest=(

...args)

=>

const

secondtest=(

[...args]

)=>

const

thirdtest=(

)=>

firsttest

('first'

,'second'

)// ["first", "second"]

secondtest

('first'

,'second'

)// ["f", "i", "r", "s", "t"]

thirdtest

('first'

,'second'

)//

兩種情況

1、當...args沒有被區域性括號【{}、】包裹時,則表現為打包args以陣列形式返回所有引數。

2、當...args被區域性括號【{}、】包裹時,則表現為解包args以所對應的陣列或物件的形式返回被解包元素的所有子元素。

三、array.from方法的注意事項

作用:將類似陣列的資料結構轉化為真正的陣列結構,比如nodelist物件轉化array

注意事項:

1、能轉化內建了iterator介面的資料結構,也就是說上述的七種

2、能轉化擁有.length屬性的類陣列資料結構

3、若被轉化資料物件本身就為陣列,則會返回乙個同樣的新的陣列【意味著是深拷貝哦】。

其他的例項方法就不加累述了,mdn文件,在此也同樣對自己警告,時不時多看看七種基本型別資料結構例項方法

物件的擴充套件 ES6重刷09

物件擴充套件 一 屬性簡潔表示 const a a constb b const obj console.log obj 二 屬性名表示式 let obj const variable b obj.a a obj variable b console.log obj 三 屬性特性 可配置性 conf...

變數的解構 ES6重刷02

解構 解構分為兩中,一種為解,另外一種為構 通俗易懂的講就是解包 打包 原始包 const obj 解包 const obj 打包 const test test 解包的情形及注意點 陣列的解包,佔位一一對應,超出則為undefined let a,b d 1,2 3 4 a 1 b 2 d 4物件...

Class的繼承 ES6重刷21

關於class繼承方面的記錄,我依舊會按照阮老師在es6書中class的繼承這一章節的目錄,將自己的感想記錄下來。一 簡介 先來欣賞下es5和es6實現繼承的一般方法 es5做法 直接操控原型鏈實現繼承,極其不靈活,還易錯 function mankind object.assign mankind...