Javascript ECMAScript 2015,iterable解构表达式

Javascript ECMAScript 2015,iterable解构表达式,javascript,ecmascript-6,destructuring,Javascript,Ecmascript 6,Destructuring,我现在正在试验iterable解构表达式,我想知道为什么特定的方法不起作用。也许你能帮我 例如,有效的方法是: var x,y,myIterable=[]; myIterable[Symbol.iterator]=函数*(){ var计数=0; 而(计数

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

例如,有效的方法是:

var x,y,myIterable=[];
myIterable[Symbol.iterator]=函数*(){
var计数=0;
而(计数<2){
产量计算++;
}
};
var myArray=Array.from(myIterable);
log(([x,y]=myArray)==myArray);
//输出:真
但是如果我这样尝试,它会返回
false
,你能解释一下原因吗

var x,y,myIterable=[];
myIterable[Symbol.iterator]=函数*(){
var计数=0;
而(计数<2){
产量计算++;
}
};
var myArray=Array.from(myIterable);
[x,y]=myArray;
console.log([x,y]==myArray);
//输出:false

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

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

尽管根据Benjamin的回答,
==
执行了参考等式检查,但您的第一次测试返回
true
的原因是分配的结果:

[x, y] = myArray 
不是
[x,y]
,而是
myArray
-赋值运算符计算的是RHS,而不是新赋值的LHS

因此:

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

==
的LHS计算结果为
myArray
,它与RHS上的对象完全相同,因此结果为
true

奇怪的问题-知道如何使用
符号。迭代器
产生
,但不是
=
比较参考质量。