ES6必知必会: spread

ES6

一,什么是扩展运算符

ES6的扩展运算符可以说是非常使用的,在给多参数函数传参,替代Apply,合并数组,和解构配合进行赋值方面提供了很好的便利性。

扩展运算符就是三个点“…”,就是将实现了Iterator 接口的对象中的每个元素都一个个的迭代并取出来变成单独的被使用。

二,数组中的扩展运算符

数组的复制:
在这里插入图片描述

理解一下:
var arr2 = [ …arr ];

[ ]表示一个数组。即arr2是一个数组。
…arr :把数组arr展开。理解分解起一个一个的元素。
相当于实现了,数组的复制—这里是浅拷贝。
在这里插入图片描述
类数组转数组:

在这里插入图片描述
Array.prototype.slice.call()
Array.from()
[…类数组对象]
字符串转数组:

把字符串转成数组:

方法一:字符串的split方法
在这里插入图片描述

方法二:[…]
在这里插入图片描述

合并数组:

方法一:数组对象的concat方法
在这里插入图片描述

方法二:[…]

在这里插入图片描述
注意:….必须有一个“容器”给包一下,直接用是错误的。

在这里插入图片描述
对比转码前后:

在这里插入图片描述
如果是数组,则直接concat拼接。

如果不是数组,则先转成数组,再conecat拼接。

在这里插入图片描述

三,对象中的扩展运算符

用于取出参数对象的所有可遍历属性,拷贝到当前对象之中。等同于使用Object.assign方法。

let obj1 = {}let obj2 = {}let obj3 = {...obj1,...obj2}
深拷贝和浅拷贝?

深拷贝 (拷贝后无关) 浅拷贝 (拷贝后还有关) … 只能拷贝一层

实现深拷贝方式一:

let school = {name:'bjdx'};let my = {age:{count:18},name:'yjb'};// 把原来的my放在新对象里,用一个新的age 把原来的age也拷贝一份let newMy = {...my,age:{...my.age}}let all = {...school,...newMy}my.age.count = 100;console.log(all);
实现深拷贝方式二(不能拷贝所有内容):

// 我们可以把对象先转化成字符串  在把字符串转换成对象let school = {name:'bjdx',fn:function(){},aa:undefined,b:null,arr:[1,2,3,[4,5]]};let my = {age:{count:18},name:'yjb'};let all = JSON.parse(JSON.stringify({...school,...my}));my.age.count = 100;console.log(all);
自已编写一个深拷贝的方式,实现深拷贝:

// 自己实现深拷贝的方法 (递归拷贝 要一层层的拷贝 )// 掌握类型判断 typeof  instanceof  Object.prototype.toString.call constructor// weakMap 弱链接 map的区别  回收机制的function deepClone(obj,hash=new WeakMap()){ // 判断obj是null还是undefinedif(obj == null) return obj;// 不是对象就不用拷贝了if(obj instanceof Date) return new Date(obj);if(obj instanceof RegExp) return new RegExp(obj);if(typeof obj !== 'object') return obj;// 要不是数组 要不是对象if(hash.has(obj)) return hash.get(obj); // 如果weakmap中有对象就直接返回let cloneObj = new obj.constructor;// 如果是对象把他放到weakMap中,如果在拷贝这个对象这个对象就存在了 直接返回这个对象即可hash.set(obj,cloneObj);for(let key in obj){ // 实现深拷贝if(obj.hasOwnProperty(key)){// 如果赋予的值是对象 我就把这个对象放到weakmap中cloneObj[key] = deepClone(obj[key],hash);}}return cloneObj}// map  weakMap  set 集合 map 映射表let obj = {age:{name:123}}obj.xxx = obj;let n = deepClone(obj);console.log(n);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值