【ES6】...扩展运算符

文章目录

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

扩展运算符

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

一、在函数中使用

1.1 传递实参

  • 使用Function.prototype.apply方法
js">let arr = [1,2,3];
function fn(a,b,c){
	console.log(a,b,c);
}
fn.apply(null, arr);	// 等价于 fn(1,2,3)
  • 使用...运算符
js">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 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。
js">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
  • 我们也可以选择获取部分参数作为变量,并将剩余的参数收集起来。
js">function showName(firstName, lastName, ...titles) {
  alert( firstName + ' ' + lastName ); // Julius Caesar

  // 剩余的参数被放入 titles 数组中
  // i.e. titles = ["Consul", "Imperator"]
  alert( titles[0] ); // Consul
  alert( titles[1] ); // Imperator
  alert( titles.length ); // 2
}

showName("Julius", "Caesar", "Consul", "Imperator");
  • Rest 参数必须放到参数列表的末尾,否则会报错。
js">// 报错
function f(a, ...b, c) {
  // ...
}

1.3 new 表达式

  • 使用 new 关键字来调用构造函数时,不能直接使用数组+ apply 的方式
  • 有了展开语法, 将数组展开为构造函数的参数就很简单了
js">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()方法连接数组
js">let arr1 = [1,2,3];
let arr2 = [4,5,6];
let arr3 = arr1.concat(arr2);
console.log(arr3);	// [1, 2, 3, 4, 5, 6]
  • 使用...运算符连接数组
js">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 拷贝数组

  • 直接赋值
js">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]
  • 使用...运算符拷贝
js">let arr1 = [1,2,3];
let arr2 = [...arr1];
arr2.push(4);
console.log(arr1);	// [1, 2, 3]
console.log(arr2);	// [1, 2, 3, 4]
  • ...运算符执行的是浅拷贝(只遍历一层)
js">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 合并对象

  • 对象合并
js">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)对象
js">let obj1 = { name: 'Jack', age: 42 };
let obj2 = { name: 'Rose', age: 13 };

let clonedObj = { ...obj1 };
console.log(clonedObj);
// 克隆后的对象: { name: "Jack", age: 42 }

http://www.niftyadmin.cn/n/509589.html

相关文章

js 回溯全排列

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 来源:力扣(LeetCod…

【ES6】let 和 const 详解

文章目录一、let 和 const 共同点1. 不重复声明2. 无变量提升3. 作用域限制4. 暂时性死区二、let 和 const 不同点1. 声明时区别2. 赋值时区别一、let 和 const 共同点 我们以前都是使用var关键字来声明变量的在ES6的时候,多了两个关键字let和const,也是…

【ES6】解构赋值

文章目录一、解构赋值二、解构数组1. 变量赋值2. 交换变量3. 默认值4. 不完全解构5. 解构数组嵌套6. 与...运算符结合使用三、解构对象1. 获取成员2. 对象赋值3. 默认值4. 解构嵌套对象四、解构函数1. 函数的参数2. 函数返回值四、其他解构1. 字符串3. 其他数据类型一、解构赋值…

ant vue a-table 动态改变表头的值

{title: () > (this.dataSource[0] && this.dataSource[0].awardType"6" ? 翻倍倍数 : 奖励值),align: "center",key: "signPoints",type: JVXETypes.inputNumber,},

js 60. 排列序列

给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。 按大小顺序列出所有排列情况,并一一标记,当 n 3 时, 所有排列如下: “123” “132” “213” “231” “312” “321” 给定 n 和 k,返回第 k 个排列。 示例 1&…

React vscode 创建 react 项目流程【超详细】

文章目录一、安装node二、配置淘宝镜像三、配置 vscode(win10)四、全局安装脚手架五、创建项目编写第一个 react 程序教程一、安装node 请在官网下载安装:https://nodejs.org/zh-cn/vscode 中 点击 ( ctrl ) 调出终端输入指令node -v&#…

js 67. 二进制求和

给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字 1 和 0。 示例 1: 输入: a “11”, b “1” 输出: “100” 来源:力扣(LeetCode) /*** param {string} a* para…

React 编写我的第一个 react 应用程序

react开发需要引入多个依赖文件:react.js、react-dom.js,分别又有开发版本和生产版本,create-react-app里已经帮我们把这些东西都安装好了,不要自己手动安装配置。 具体步骤:先创建一个 react 项目:点这跳转…