通过展开运算符进行数组解构

Array destructuring via spread operator

关于数组解构的 MDN documentation 是不言自明的,但是,我无法理解像这样解构数组时幕后发生的事情:

let Arr = [1, 3, 5, 6];
let newArr = [];

[newArr[0], ...newArr] = Arr;

console.log(Arr); // returns [1, 3, 5, 6]
console.log(newArr); // returns [3, 5, 6]

为什么newArr没有继承Arr的第一个数组成员?

如果你有

[x, ...y] = Arr;

就像

x = Arr[0];
y = Arr.slice(1);

所以当你有

[newArr[0], ...newArr] = Arr;

就像

newArr[0] = Arr[0];
newArr = Arr.slice(1);

解构中涉及的赋值从左到右发生。直播:

const listener = {
  get foo() {
    return {
      set bar(value) {
        console.log('setting bar');
      },
    };
  },
  set foo(value) {
    console.log('setting foo');
  },
};

[listener.foo.bar, ...listener.foo] = [1, 2, 3];

有效,但它会用其余参数覆盖索引零上的第一个值。

let array0 = [1, 3, 5, 6],
    array1 = [],
    array2 = [];

[array2[0], ...array1] = array0;

console.log(array0); // [1, 3, 5, 6]
console.log(array1); // [3, 5, 6]
console.log(array2); // [1]
.as-console-wrapper { max-height: 100% !important; top: 0; }