在此我會著重講擴充套件運算子【三點運算子】,結合對於陣列的一些便捷操作及深拷貝;其次講講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...