Угловой = длина массива всегда 1? - PullRequest
0 голосов
/ 12 марта 2019

Ниже приведен код в машинописном тексте:

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

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

'this' всегда работает в области видимости, а конструктор массива всегда принимает статические значения, которые он никогда не будет делать eval (this.something), поэтому, когда вы передаете this.count, он передается как 1 неопределенное статическое значение, поэтому становится массивом одной длины (undefined является статическим значением сам по себе).
Также следует отметить, что конструктор массива принимает только

  1. Числовое значение, представляющее размер массива или
  2. список значений через запятую.

    В вашем случае, если вам нужно альтернативное решение, инициализируйте массив пустым, а затем присвойте
    arrObj.length = this.count
0 голосов
/ 12 марта 2019

Массив также может быть создан с использованием объекта Array. Конструктор Array может быть передан.

вы инициализируете массив снова и снова ... из кода, которым вы поделились, когда вы делаете:

  • var arrObj:number[] = new Array(5)
  • в этом случае вы инициализируете массив размера 5, который будет неопределенным

и когда вы делаете ...

  • var arrObj:number[] = new Array(1)
  • вы инициализируете массив одним элементом, который в этом случае будет неопределенным

Вы должны сделать это один раз var arrObj:number[] = [] а затем нажмите значение в массиве, выполнив arrObj.push(yourValue)

демо на стеке

...