【问题标题】:Angular = array length is always 1?Angular = 数组长度始终为 1?
【发布时间】:2019-03-12 04:40:08
【问题描述】:

以下是打字稿中的代码,

count: number;

this.count 是从 html 组件访问的。

console.log(this.count) 给我 5。

var arrObj:number[] = new Array(this.count)

console.log(arrObj.length);

这里数组的长度总是1。

var arrObj:number[] = new Array(5)

console.log(arrObj.length);

输出:5

var arrObj:number[] = new Array(this.count)

console.log(arrObj.length);

输出:1

为什么全局变量长度总是1?

【问题讨论】:

    标签: angular4-forms


    【解决方案1】:

    也可以使用 Array 对象创建数组。可以传递Array构造函数。

    您正在一次又一次地初始化数组...从您共享的代码中,当您这样做时:

    • var arrObj:number[] = new Array(5)
    • 在这种情况下,您正在初始化大小为 5 的数组,所有这些都是未定义的

    当你这样做时......

    • var arrObj:number[] = new Array(1)
    • 您正在使用单个项目初始化数组,在这种情况下将未定义

    你应该这样做一次var arrObj:number[] = [] 然后通过 arrObj.push(yourValue) 将值推送到数组中

    demo on stackblitz

    【讨论】:

    • va arrobj:number[ ] =new Array(5) 即;使用了数组构造函数。因此,当我通过 5 时,它会创建一个大小为 5 的数组,即;数组的长度(arrobj.length)给了我 5.. 但我传递了一个全局变量(this.count)并且包含一个等于 5 的值,即; var arrobj:number[]=new Array(this.count) 给我一个 arrobj.length =1。为什么会这样??
    【解决方案2】:

    'this' 总是在作用域中工作,并且数组构造函数总是接受静态值,它永远不会做 eval(this.something),所以当你传递 'this.count' 时,它会作为 1 个未定义的静态值传递,这就是它的原因成为一个长度数组(未定义本身就是一个静态值)。
    另外需要注意的是数组构造函数只接受

    1. 表示数组大小的数值或
    2. 逗号分隔值列表。

      在您的情况下,如果您需要替代解决方案,则将数组初始化为空,然后分配
      arrObj.length = this.count

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 2011-08-22
      相关资源
      最近更新 更多