码迷,mamicode.com
首页 > 其他好文 > 详细

es6扩展运算符三个点(...)

时间:2021-06-25 17:07:36      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:hello   http   组复制   拷贝   pre   size   方式   运算   nic   

对象的扩展运算符
对象中的扩展运算符(...)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中

let bar = { a: 1, b: 2 };
let baz = { ...bar }; // { a: 1, b: 2 }

如果用户自定义的属性,放在扩展运算符后面,则扩展运算符内部的同名属性会被覆盖掉。

let bar = {a: 1, b: 2};
let baz = {...bar, ...{a:2, b: 4}}; // {a: 2, b: 4}

例子

let obj1 = { a: 1, b: 2};
let obj2 = { ...obj1, b: ‘2-edited‘};
console.log(obj1); // {a: 1, b: 2}
console.log(obj2); // {a: 1, b: "2-edited"}

上面这个例子扩展运算符拷贝的对象是基础数据类型,因此对obj2的修改并不会影响obj1,如果改成这样:

let obj1 = { a: 1, b: 2, c: {nickName: ‘d‘}};
let obj2 = { ...obj1};
obj2.c.nickName = ‘d-edited‘;
console.log(obj1); // {a: 1, b: 2, c: {nickName: ‘d-edited‘}}
console.log(obj2); // {a: 1, b: 2, c: {nickName: ‘d-edited‘}}

这里可以看到,对obj2的修改影响到了被拷贝对象obj1,原因上面已经说了,因为obj1中的对象c是一个引用数据类型,拷贝的时候拷贝的是对象的引用。
数组的扩展运算符
扩展运算符同样可以运用在对数组的操作中。
可以将数组转换为参数序列

function add(x, y) {
return x + y;
}
const numbers = [4, 38];
add(...numbers) // 42

可以复制数组
如果直接通过下列的方式进行数组复制是不可取的:

const arr1 = [1, 2];
const arr2 = arr1;
arr2[0] = 2;
arr1 // [2, 2]

原因上面已经介绍过,用扩展运算符就很方便:

const arr1 = [1, 2];
const arr2 = [...arr1];

扩展运算符可以与解构赋值结合起来,用于生成数组

const [first, ...rest] = [1, 2, 3, 4, 5];
first // 1
rest // [2, 3, 4, 5]

需要注意的一点是:
`如果将扩展运算符用于数组赋值,只能放在参数的最后一位,否则会报错。`

const [...rest, last] = [1, 2, 3, 4, 5];
// 报错
const [first, ...rest, last] = [1, 2, 3, 4, 5];
// 报错

扩展运算符还可以将字符串转为真正的数组

[...‘hello‘]
// [ "h", "e", "l", "l", "o" ]

总结的不全,可以参考阮一峰老师的:https://es6.ruanyifeng.com/?search=map&x=0&y=0#docs/array

es6扩展运算符三个点(...)

标签:hello   http   组复制   拷贝   pre   size   方式   运算   nic   

原文地址:https://www.cnblogs.com/vaelcy/p/14929727.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!