ECMAScript 2015,迭代解构表达式 [英] ECMAScript 2015, iterable destructuring expression

查看:139
本文介绍了ECMAScript 2015,迭代解构表达式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在试验迭代的解构表达式,我想知道为什么一个具体的方式不起作用。也许你可以帮助我。



例如:

  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

但是,如果我以这种方式尝试它返回 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


I am right now experimenting with the iterable destructuring expression, and i am wondering why a specific way does not work. Maybe you can help me on that.

For example that works:

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

But if i try it this way it returns false, can you explain why?

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

解决方案

=== compares objects by references, since myArray and [x, y] evaluate to a different array.

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

这篇关于ECMAScript 2015,迭代解构表达式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆