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
.
我现在正在试验可迭代的解构表达式,我想知道为什么特定的方法不起作用。也许你可以帮我。
例如有效:
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
.