关于JS数组的问题

a: AA[];
b: AA;

ngOnInit() {
    this.a = [];
}

x() {
    this.a = [...this.a, this.b];  <--- 这是什么意思?
}
阅读 2.4k
4 个回答

先看看babel解析后的结果

 this.a = [...this.a, this.b];
          ↓↓
 this.a = [].concat(_toConsumableArray(this.a), [this.b]);
由这段函数我们可以看到如果为数组会创建新数组克隆,否则会调用 Array.from 方法从类似数组或可迭代对象中创建新的数组实例
function _toConsumableArray(arr) {
 if (Array.isArray(arr)) { 
    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {
      arr2[i] = arr[i]; } return arr2; 
    } else { 
      return Array.from(arr); 
    }
  }

我们再来试一遍

 [...'test',10];   // ['t','e','s','t',10] 结果和预期一样

 //再回顾这段代码就清晰许多了
 this.a = [...this.a, this.b];
 判断 this.a 类型 -> 为数组则克隆返回新数组 => 用 this.a 指向 [].concat() 方法拼接的 新数组 和 this.b 

clipboard.png

希望能够帮助到 题主!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题