Javascript ECMAScript 2015,iterable解构表达式
我现在正在试验iterable解构表达式,我想知道为什么特定的方法不起作用。也许你能帮我 例如,有效的方法是:Javascript ECMAScript 2015,iterable解构表达式,javascript,ecmascript-6,destructuring,Javascript,Ecmascript 6,Destructuring,我现在正在试验iterable解构表达式,我想知道为什么特定的方法不起作用。也许你能帮我 例如,有效的方法是: var x,y,myIterable=[]; myIterable[Symbol.iterator]=函数*(){ var计数=0; 而(计数
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
奇怪的问题-知道如何使用符号。迭代器和产生,但不是=
比较参考质量。