文章目录

  • 扩展运算符
  • 一、在函数中使用
    • 1.1 传递实参
    • 1.2 接收形参
    • 1.3 new 表达式
  • 二、在数组中使用
    • 2.1 合并数组
    • 2.2 拷贝数组
  • 三、在对象中使用
    • 3.1 合并对象
    • 3.2 拷贝对象

扩展运算符

  • ES6 里面号新添加了一个运算符...,叫做扩展运算符,又称(Spread 语法)
  • 可以在函数调用/数组构造时, 将数组表达式或者string在语法层面展开;
  • 还可以在构造字面量对象时, 将对象表达式按key-value的方式展开
let arr = [1,2,3,4,5];
console.log(...arr);    // 1 2 3 4 5

一、在函数中使用

1.1 传递实参

  • 使用Function.prototype.apply方法
let arr = [1,2,3];
function fn(a,b,c){console.log(a,b,c);
}
fn.apply(null, arr);    // 等价于 fn(1,2,3)
  • 使用...运算符
let arr = [1,2,3];
function fn(a,b,c){console.log(a,b,c);
}
fn(...arr); // 等价于 fn(1,2,3)

1.2 接收形参

  • ES6 引入 rest 参数(形式为...变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了。
  • rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。
function add(...values) {let sum = 0;for (var val of values) {sum += val;}// 也可以使用数组的方法// values.map(item=>sum += item)return sum;
}add(2, 5, 3) // 10
  • 我们也可以选择获取部分参数作为变量,并将剩余的参数收集起来。
function showName(firstName, lastName, ...titles) {alert( firstName + ' ' + lastName ); // Julius Caesar// 剩余的参数被放入 titles 数组中// i.e. titles = ["Consul", "Imperator"]alert( titles[0] ); // Consulalert( titles[1] ); // Imperatoralert( titles.length ); // 2
}showName("Julius", "Caesar", "Consul", "Imperator");
  • Rest 参数必须放到参数列表的末尾,否则会报错。
// 报错
function f(a, ...b, c) {// ...
}

1.3 new 表达式

  • 使用 new 关键字来调用构造函数时,不能直接使用数组+ apply 的方式
  • 有了展开语法, 将数组展开为构造函数的参数就很简单了
let dateFields = [2022, 2, 2];
let d = new Date(...dateFields);
console.log(d); // Wed Mar 02 2022 00:00:00 GMT+0800 (中国标准时间)

二、在数组中使用

2.1 合并数组

  • 使用Array.concat()方法连接数组
let arr1 = [1,2,3];
let arr2 = [4,5,6];
let arr3 = arr1.concat(arr2);
console.log(arr3);  // [1, 2, 3, 4, 5, 6]
  • 使用...运算符连接数组
let arr1 = [1,2,3];
let arr2 = [4,5,6];
let arr3 = [...arr1,...arr2];
console.log(arr3);  // [1, 2, 3, 4, 5, 6]

2.2 拷贝数组

  • 直接赋值
let arr1 = [1,2,3];
let arr2 = arr1;
arr2.push(4);
console.log(arr1);  // [1, 2, 3, 4]
console.log(arr2);  // [1, 2, 3, 4]
  • 使用...运算符拷贝
let arr1 = [1,2,3];
let arr2 = [...arr1];
arr2.push(4);
console.log(arr1);  // [1, 2, 3]
console.log(arr2);  // [1, 2, 3, 4]
  • ...运算符执行的是浅拷贝(只遍历一层)
let arr1 = [1,2,3];
let arr2 = [[4],[5],[6]];
let arr3 = [...arr1,...arr2];
console.log(arr3);  // [1, 2, 3, [4],[5],[6]]

三、在对象中使用

3.1 合并对象

  • 对象合并
let obj1 = { name: 'Jack', age: 42, gender:'男'};
let obj2 = { name: 'Rose', age: 13 };let mergedObj = { ...obj1, ...obj2 };
console.log(mergedObj);
// 合并后的对象: {name: "Rose", age: 13, gender: "男"}

3.2 拷贝对象

  • 浅拷贝(不包含 prototype)对象
let obj1 = { name: 'Jack', age: 42 };
let obj2 = { name: 'Rose', age: 13 };let clonedObj = { ...obj1 };
console.log(clonedObj);
// 克隆后的对象: { name: "Jack", age: 42 }

【ES6】...扩展运算符相关推荐

  1. ES6扩展运算符的几个小技巧

    es6扩展运算符,也就是...  ,作用是将一个数组转为用逗号分隔的参数序列. 那么问题来了,我们为啥要用这么奇怪的东东涅,当然因为它能大大提高我们的开发效率.所以,可别小看这三个点. 1.复制数组( ...

  2. ES6 - 扩展运算符与Object.assign对象拷贝与合并

    文章目录 扩展运算符能做什么? 什么是深浅拷贝 使用ES6扩展运算符 对象浅拷贝 对象合并 Object.assign Object.assign详解 Object.assign()实用 给对象添加属 ...

  3. php es6写法,ES6...扩展运算符(示例代码)

    在数组中的应用 扩展运算符(spread)是三个点(...).它好比 rest 参数的逆运算,++将一个数组转为用逗号分隔的参数序列++. console.log(...[1, 2, 3]) // 1 ...

  4. ES6——扩展运算符的作用以及使用场景

    文章目录 对象扩展运算符 解构赋值 扩展运算符 数组扩展运算符 替代函数的apply() 方法 扩展运算符的应用 复制数组 合并数组 与解构赋值结合 字符串 实现了Iterator接口的对象 对象扩展 ...

  5. js数组合并、去重、降维(ES6:扩展运算符、Set)

    js数组合并.去重.降维 1.合并 1.1使用concat()进行合并数组 function get_concat(collection_a, collection_b) {return collec ...

  6. ES6——扩展运算符(...)

    文章目录 一.扩展运算符(...) 二.数组扩展运算符的应用 1.合并数组 2.与解构赋值结合 3.字符串转数组 4.实现了 Iterator 接口的对象 5.Map 和 Set 结构, Genera ...

  7. JS之ES6扩展运算符三个点(...)用于剥离{} 获取属性值

    1.用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中 let bar = { a: 1, b: 2 }; let baz = { ...bar }; // { a: 1, b: 2 } 等价于 ...

  8. ES6——扩展运算符/三点运算符(...)

    扩展运算符(spread)是三个点(...). 数组的扩展运算符 对于数组来说,它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. console.log(...[1, 2, 3]) ...

  9. ES6 “...“ 扩展运算符 (点点点)

    1.定义 扩展运算符(spread)是三个点(-),它如同rest参数的逆运算,将一个数组转为用逗号分隔的参数序列. 2.使用 console.log(...[1,2,3]); //1 2 3 con ...

  10. ES6扩展运算符用法

    扩展运算符可以将数组或者对象转为用逗号分隔的参数序列 扩展运算符(...)用于取出参数对象中的所有可遍历属性,拷贝到当前对象中 用法: 1.将一个数组放入另一个数组中 var middle = [3, ...

最新文章

  1. linux部署tomcat启动后无法访问,linux中启动tomcat后浏览器无法访问的解决方法
  2. SpringBoot使用StringRedisTemplate操作Redis字符串
  3. Samba 服务共享
  4. kotlin 查找id_Kotlin程序查找平行四边形的区域
  5. 重新上手c语言的一些坑
  6. 【C语言】矩阵乘法(二维数组)
  7. Unity3d之求物体体积
  8. 基于块的纹理合成 matlab程序,基于块的纹理合成方法和装置制造方法
  9. 正常的vite创建项目并且安装vue router,vant的代码示例
  10. layui前端页面table表格怎么格式化转换时间_个人经历:我的前端学习历程
  11. linux 建立ftp用户
  12. SpringCloud观后感
  13. CentOS7下使用vlmcsd搭建KMS服务器激活环境
  14. php max file uploads,php上传多文件max_file_uploads限制问题
  15. Python网络爬虫阶段总结
  16. 量子计算机五条原则,量子信息科学:量子计算机、隐形传物与人脑量子运算
  17. Windows API函数 (绘图函数)
  18. abort()函数使用
  19. 基于JAVAweb开发数码产品推荐平台系统设计与实现计算机毕业设计源码+数据库+lw文档+系统+部署
  20. ArcGIS拓扑面错误批量修改

热门文章

  1. 利用R语言如何画出广州房价地图
  2. 怎么提取视频里的音频?这三种方法都可以轻松提取音频
  3. java怎么修改支付宝步数,修改支付宝运动步数,不要root
  4. CentOS 7安装搜狗拼音输入法
  5. 论文密级_毕业论文格式怎么调?模板在这里!(专业学位)
  6. VS Code插件和快捷键
  7. c语言:十六进制转化为十进制
  8. 单片机实例35——DS18B20数字温度计使用(硬件电路图+C语言程序)
  9. 美妆是个好生意,帮女神们虚拟试妆的app也会是好生意吗?
  10. Android电视安装Kodi