Почему тип числа не инициализируется 0? - PullRequest
0 голосов
/ 18 января 2019

У меня есть следующий код в классе обслуживания:

count: number;

increment() {
  this.count++;
  console.log(this.count);
}

Лог выводит NaN.

Мне интересно, почему он не будет инициализировать count до 0, когда я указываю тип в объявлении. Я заменил его на count = 0, но мне просто любопытно, что за этим стоит логика.

Ответы [ 3 ]

0 голосов
/ 18 января 2019

Если вы работаете с Java, вы можете ожидать, что переменная boolean будет иметь значение по умолчанию false.

Точно так же и в JavaScript значение по умолчанию существует , и это примитивное значение undefined.TypeScript просто использует типы данных JavaScript и не меняет поведение.

Таким образом, любая переменная, которая определена и не назначена, будет иметь значение по умолчанию undefined (и НЕ null; в отличие от Java)

Читать в MDN: https://developer.mozilla.org/en-US/docs/Glossary/Undefined

0 голосов
/ 18 января 2019

Это не имеет отношения к Angular. Сам JavaScript никогда не инициализирует значение при определении переменной, JavaScript просто выделяет эту переменную как переменную любого типа.

На самом деле вы пишете на TypeScript, который, конечно же, является типизированным надмножеством JavaScript, и все это

count: number;

выделяет переменную count и обозначает ее как тип number. Вы, разработчик, должны инициализировать переменную самостоятельно, потому что во многих случаях вы не хотите, чтобы переменная была инициализирована.

Так, например, в Vue есть декоратор @Prop(), который вы используете для предоставления доступа к данным из родительского компонента дочернему элементу.

Пример:

@Prop(String)
public title?: string

Так что здесь нет никаких причин для того, чтобы мы присваивали этой переменной значение, поскольку она будет передаваться из родительского компонента, и переписываем это значение.

Есть еще много случаев, когда вы не хотите инициализировать переменную значением, имейте в виду, что это может привести к неопределенным значениям, которые, если вы не обрабатываете, могут быть проблемой. Однако, если вы используете что-то вроде TSLint в Visual Studio Code или любом другом расширяемом редакторе, вы увидите, когда вам понадобится это обработать.

public exampleFunction() {
  // if you try and use title here it may be undefined
  if (!this.title) {
    return
  }
  // after you check to make sure that title is not undefined you can be sure it's safe to use it
}

В целом, если язык не инициализирует переменную автоматически, это увеличивает удобочитаемость языка и уменьшает ненужные операции.

0 голосов
/ 18 января 2019

Это не определено сейчас. Вот как работает JavaScript, пока вы не определите переменную, которая не определена ...

В вашем случае, если вы хотите начать отсчет с 0, просто установите значение переменной в 0 ...

Пример: count: number = 0;

...