ECMAScript 2015,可迭代解构表达式

ECMAScript 2015, iterable destructuring expression

我现在正在试验可迭代的解构表达式,我想知道为什么特定的方法不起作用。也许你可以帮我。

例如有效:

var x, y, myIterable = [];
myIterable[Symbol.iterator] = function* () {
  var count = 0;
  while(count < 2){
    yield count++;
  }
};
var myArray = Array.from(myIterable);
console.log(([x,y] = myArray) === myArray);
//OUTPUT: true

但是如果我这样尝试 returns false,你能解释一下为什么吗?

var x, y, myIterable = [];
myIterable[Symbol.iterator] = function* () {
  var count = 0;
  while(count < 2){
    yield count++;
  }
};
var myArray = Array.from(myIterable);
[x, y] = myArray;
console.log([x,y] === myArray);
//OUTPUT: false

=== 通过引用比较对象,因为 myArray[x, y] 评估不同的数组。

[] === []; // false
{} === {}; // false

尽管 === 执行了 引用相等性 检查,根据本杰明的回答,您的第一个测试 returns true 的原因是因为作业结果:

[x, y] = myArray 

不是 [x, y],而是 myArray - 赋值运算符的计算结果为 RHS,而不是新分配的 LHS。

所以给出:

([x,y] = myArray) === myArray

=== 的左轴计算结果为 myArray,这与右轴上的对象完全相同,因此结果为 true.