es6新属性数组和对象的扩展运算符(...)

1. 对象扩展(对象赋值)

(1)这里的…相当于Object.assign()方法

let obj = {a:1,b:2}
let copy = {...obj}
console.log(copy)//{a:1,b:2}

//等价于assign方法:
//参数1:被赋值的对象(目标对象),参数2:要赋值的对象(源对象)
let obj1 = Object.assign({},obj)
console.log(obj1)//{a:1,b:2}

(2)…进行的是对基本数据类型属性的深拷贝,修改拷贝后的对象不会影响源对象,改变引用类型数据浅拷贝,会受源数据影响

//基本数据类型
let obj = {a:1,b:2}
let copy = {...obj}
copy.b = 3
console.log(copy)//{a:1,b:3}
console.log(obj)//{a:1,b:2}
//引用类型
let obj1 = {attr:{name:'2'},arr:[1,2]}
let copy1 = {...obj1}
copy1.arr[0] = 3
copy1.attr.name = '1'
console.log(copy1)//{attr: { name: '1' } arr: [ 3, 2 ] }
console.log(obj1)//{attr: { name: '1' } arr: [ 3, 2 ] }

(3)属性合并覆盖

let obj = {a:1,b:2}
let cover = {...obj,...{a:3,c:10}}
console.log(cover)//{a:3,b:2,c:10}

(4)特殊例子----没有对对象里的对象进行深拷贝

let exobj = {a:10,b:11,c:{ctext:'text'}}
let expecail = {...exobj}
expecail.c.ctext = 'change'
console.log(expecail)//{ a: 10, b: 11, c: { ctext: 'change' } }
console.log(exobj)//{ a: 10, b: 11, c: { ctext: 'change' } }

2. 数组扩展

(1)数组转化为参数序列

//数组转化为参数序列[1,2]--->1,2
let arr = [1, 2];

function add(a, b) {
  return a + b;
}
let result = add(...arr)
console.log(result) //3

(2)数组深拷贝

let arr = [1,2]
let arr2 = [...arr]
console.log(arr2) //[1,2]

(3)数组解构+…运算符
…运算字段只能放在末尾,不能放在开头和中间

let [first, second, ...res] = [1, 2, 3, 4, 5, 6]
// let [first, ...res, second] = [1, 2, 3, 4, 5, 6]//报错
// let [...res,first, second] = [1, 2, 3, 4, 5, 6]//报错
console.log(first) //1
console.log(second) //2
console.log(res) //[3,4,5,6]

(4) 将字符串转化为数组

let str = [...'hello']
console.log(str) //[ 'h', 'e', 'l', 'l', 'o' ]

(5)将数据结构转化为数组

//Map数据结构
let map = new Map([
  ['c', 3],
  ['d', 4]
])
console.log([...map.values()]); //[ 3, 4 ]
//Set数据结构
let set = new Set([1, 2, 3, 4])
console.log([...set]);//[1, 2, 3, 4]
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值