ES6中的展开运算符

展开语法(Spread syntax)

可以在函数调用/数组构造时,将数组表达式或者string在语法层面展开,还可以在构造字面量对象时, 将对象表达式按key-value的方式展开。

展开语法的场景

  • 在函数调用时使用
  • 在数组构造时使用
  • 在构建对象字面量时,也可以使用展开运算符,这个是在ES2018(ES9)中添加的新特性
const names = ["aaa","bbb","ccc"]
const name = 'hgx'
const name2 = 'black'
const info = {name:'why',age:18}

//函数调用时
function foo(x,y,z){
    console.log(x,y,z);
    
}
function foo2(x,y,z,...rest){ //这里的...是剩余参数
    console.log(x,y,z);
    console.log(rest);
}
foo(...names) //aaa bbb ccc


foo(...name) //h g x
foo(...name2) //b l a 换行 [ 'c', 'k' ]

//2.构造数组时
const newName = [...names,...name]
console.log(newName); //[ 'aaa', 'bbb', 'ccc', 'h', 'g', 'x' ]

//ES2018(ES9)我们在构建对象字面尽量的时候,可以使用展开元素安抚
const obj = {...info,address:'广州市'} //{ name: 'why', age: 18, address: '广州市' }
console.log(obj);

展开运算符其实是一个浅拷贝(只是拷贝了对象的内存地址)

//3.展开运算符其实是一个浅拷贝
const info = {
    name : 'why',
    friend :{name:"kobe"} //friend:0xa00指向堆内存中{name:"kobe"}
}

const obj = {...info,name:'harry'} //拷贝一份(0xa00的地址也拷贝过去了),并覆盖掉之前的name
console.log(obj); //{ name: 'harry', friend: { name: 'kobe' } }

obj.friend.name = 'lebro' //obj.friend(0xa00)将该指针指向的对象的name改成lebro
console.log(info.friend.name); //lebro 这个值是会改变的

来自本人掘金文章:https://juejin.cn/post/7113023241664331784/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值