数组的扩展----ES6重刷08

在此我会着重讲扩展运算符【三点运算符】,结合对于数组的一些便捷操作及深拷贝;其次讲讲Array实例的某些新的方法及注意事项【略带Iterator接口个返回值为Iterator遍历器对象的genrator函数function *() {}】;最后讲讲哪些数据结构存在内置部署的Iterator接口,而对于没有内置部署的Iterator接口的数据结构,怎末进行自定义的Iterator接口部署。

一、扩张运算符【三点运算符】
1、适用于那些数据结构?
首先总的来说三点运算符是解包对象,为什么能解包呢,是因为利用了被解包对象中的遍历器,也就是Iterator接口,(至于为什么Object数据结构并没有内置的Iterator接口,却可以被三点运算这点我也还未清楚【若有大佬清楚,还望点明小弟,在此不胜感激】),这就说明拥有内置Iterator接口的数据结构就可以被三点运算符解包。

好现在我们明白了能被三点运算符解包的数据结构有内置Iterator接口这一特点(除了Oobject),那我们就来说说那些数据结构存在内置的Iterator接口
原生具备 Iterator 接口的数据结构如下。
Array
Map
Set
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 { first: objectFirst, ...objectRest } = { first: 'first', second: 'second', third: 'third' }
const [ arrayFirst, ...arrayRest ] = [1, 2, 3, 4, 5]
console.log('objectFirst', objectFirst) // first
console.log('objectRest', objectRest) // {second: "second", third: "third"} 
console.log('arrayFirst', arrayFirst) // 1
console.log('arrayRest', arrayRest) // [2, 3, 4, 5]

二、扩展运算的解包和打包【当用于函数传参时】

const firstTest = (...args) => {
  console.log(args)
}
const secondTest = ([...args]) => {
  console.log(args)
}
const thirdTest = ({...args}) => {
  console.log(args)
}

firstTest('first', 'second') // ["first", "second"]
secondTest('first', 'second') // ["f", "i", "r", "s", "t"]
thirdTest('first', 'second') // {0: "f", 1: "i", 2: "r", 3: "s", 4: "t"}

两种情况
1、当...args没有被区域性括号【{}、[]】包裹时,则表现为打包args以数组形式返回所有参数。

2、当...args被区域性括号【{}、[]】包裹时,则表现为解包args以所对应的数组或对象的形式返回被解包元素的所有子元素。

三、Array.from方法的注意事项
作用:将类似数组的数据结构转化为真正的数组结构,比如NodeList对象转化Array
注意事项:
1、能转化内置了Iterator接口的数据结构,也就是说上述的七种
2、能转化拥有.length属性的类数组数据结构
3、若被转化数据对象本身就为数组,则会返回一个同样的新的数组【意味着是深拷贝哦】。

其他的实例方法就不加累述了,mdn文档在此也同样对自己警告,时不时多看看七种基本类型数据结构实例方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值