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

简介: es6扩展运算符三个点(...)
记录知识点、每天进步一点一点点~
学习过程中将笔记跟大家分享,希望对大家也有所帮助,共同成长进步~

对象的扩展运算符

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

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是一个引用数据类型,拷贝的时候拷贝的是对象的引用。

代码块应用例子:

    const user = { 
        name: 'Kapil Raghuwanshi', 
        gender: 'Male' 
    };
    const college = { 
        primary: 'Mani Primary School', 
        secondary: 'Lass Secondary School' 
    };
    const skills = { 
        programming: 'Extreme', 
        swimming: 'Average', 
        sleeping: 'Pro' 
    };
    const summary = {...user, ...college, ...skills};
    console.log(summary)

image.png

数组的扩展运算符

扩展运算符同样可以运用在对数组的操作中。
可以将数组转换为参数序列

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

目录
相关文章
|
6月前
|
JavaScript
|
6月前
|
JSON 自然语言处理 JavaScript
ES6 字符串的扩展
ES6 字符串的扩展
|
23天前
|
前端开发 网络架构
ES6对函数做了哪些扩展?
本文首发于微信公众号“前端徐徐”,介绍了 ES6 中函数参数的默认值、rest 参数、严格模式、name 属性、箭头函数、尾调用优化等新特性,并详细解释了各个特性的使用方法和注意事项。同时,还介绍了 ES2017 和 ES2019 中关于函数的一些改进,如函数参数尾逗号、`Function.prototype.toString()` 方法的修改以及 `catch` 语句参数的省略。
9 1
|
3月前
|
JavaScript 前端开发
利用ES6中的...扩展运算符来合并数组
本文介绍了使用ES6的新特性简化JavaScript编程的多种方法。其中包括使用扩展运算符`...`优雅地合并数组,解构赋值快速提取数组和对象值,`for...of`循环及箭头函数提升数组遍历效率,`find`方法简化数组搜索,`+`号与短路运算符优化数据类型转换及默认值设置,以及模板字符串和扩展运算符增强的对象合并技巧,这些方法让代码更加简洁高效。
21 0
|
3月前
|
存储 JavaScript 前端开发
es6 扩展运算符
【8月更文挑战第20天】
16 0
|
3月前
|
存储 API
ES6新增语法 扩展运算符
ES6新增语法 扩展运算符
26 0
|
6月前
|
存储 网络架构
ES6之rest参数、扩展运算符
ES6之rest参数、扩展运算符
38 1
|
自然语言处理 JavaScript 前端开发
ES6(字符串的扩展)
ES6(字符串的扩展)
92 0
|
12月前
扩展运算符
扩展运算符
26 0