es6中...是什么意思。能分别解释一下下面的表达式么

1

var set = new Set([1, 2, 3, 4, 4,4,4,4,2,2,2])
        set=[...set]

2

let [head, ...tail] = [1, 2, 3, 4];

3

let [x, y, ...z] = ['a'];
阅读 18.2k
4 个回答

第一个叫做 展开运算符(spread operator),作用是和字面意思一样,就是把东西展开。可以用在arrayobject上都行。
比如:

let a = [1,2,3];
let b = [0, ...a, 4]; // [0,1,2,3,4]

let obj = { a: 1, b: 2 };
let obj2 = { ...obj, c: 3 }; // { a:1, b:2, c:3 }
let obj3 = { ...obj, a: 3 }; // { a:3, b:2 }

第二个,第三个叫做 剩余操作符(rest operator),是解构的一种,意思就是把剩余的东西放到一个array里面赋值给它。一般只针对array的解构,其他的没见过。。。
比如:

let a = [1,2,3];
let [b, ...c] = a;
b; // 1
c; // [2,3]

// 也可以
let a = [1,2,3];
let [b, ...[c,d,e]] = a;
b; // 1
c; // 2
d; // 3
e; // undefined

// 也可以
function test(a, ...rest){
  console.log(a); // 1
  console.log(rest); // [2,3]
}

test(1,2,3)

第一个你可以理解为建立了一个set对象,这个对象的作用是用来去重,[...set]则是将去重的结果返还给你。
第二三个是结构函数和省略(名字不记得)函数,左边的是变量匹配右边的。...X则代表省略的那部分都是他来拿。这样就把一个数组分解成变量了

...属于拓展运算符,用于对象或者数组的析构,比如:
数组:
let array = [1, 2, 3, 4, 5];
const { x, y, ...z } = array;
// 其中z=[3, 4, 5],注意如果由于array的length不足以完成析构,则会导致z为[]
对象:
let obj = { name: 'zhangsan', age: 30, city: 'shenzhen' };
const {name, ...others} = obj;
console.log(name); // 'zhangsan'
console.log(others); // {age: 30, city: 'shenzhen'}

第一个问题中,如果使用es5的var set1 = set,对set1做添加、删除操作,也会影响到set,使用ES6中的拓展运算符(...)就不会有这个问题。

推荐问题
宣传栏