ES6关于rest参数与数组扩展符返回值?

autozerolee
  • 276
function log(...value) {
  console.log(value);
  console.log(...value);
}

log([1,2,3]); 
// [ [ 1, 2, 3 ] ]
// [ 1, 2, 3 ]
log(1,2,3);
// [ 1, 2, 3 ]
// 1 2 3

rest参数 表示函数没有对应形参的实参 ...name name对应一个数组 这个没有问题
对于数组扩展符的...[1,3,4] 其实就是展开数组 返回的是一个序列
1.那返回的这个序列的类型是什么呢?
2.这个扩展语句其他的用法有什么呢,在对象中是如何使用的?

回复
阅读 4k
2 个回答
wolfx
  • 975
✓ 已被采纳

数组展开是变成多个参数。
比如console.log(...[1,2,3]);
其实等价于console.log(1,2,3);

对象中的用法:

let obj1 = {a:"A",b:"C"};
let obj2 = {...obj1,c:"C"};

这时obj2为{a:"A",b:"C",c:"C"}

补充一下MDN 上解释为扩展语句与剩余参数
扩展语句的主要使用

  1. 合并数组,复制数组 以前编写需要Array.prototype.slice.call
[1, 2, ...[1,2,3]] // [1,2,1,2,3]
let arr = [1, 2, 3];
let arr2 = [...arr]; // [1,2,3]
  1. 解构赋值一起使用 生成数组 必须是数组的最后一个元素
var list = [9,8,7,6];
  [a, ...rest] = list;
  a // 9
  rest // [8,7,6]
  rest instanceof Array // true
  [...arr, tmp] = list; // error: Rest element must be last element in array  
  1. 转化伪数组
var lis = [...document.querySelectorAll('li')];
lis instanceof Array // true
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏