Как правильно инкрементировать переменную в javaScript?
Есть простой цикл, который перебирает три слова по символам:
let en, ru;
for (i=0;i<3;i++){
let word = words[i];
for (y=0;y<word.length;y++){
let ch = word.charCodeAt(y);
if (ch<=122 && ch>=65){en++;}
if (ch<=255 && ch>=192){ru++;}
}
}
Вопрос: Почему переменные en и ru возвращают значение NaN? Как правильно инкрементировать переменную в javaScript?
Андрей, Только переменные типов integer/double/long нужно явно объявлять (инициализировать), или есть ещё какие-то типы данных, которые требуют явного объявления в javaScript?
Спасибо за ответ.
На мой субъективный взгляд, лучше всего инициализировать явно вообще все переменные, но именно требования как такового нет. Просто в данном случае вы поймали конкретно такой кейс, где это было необходимо
My1Name, любые переменные надо инициализировать начальными значениями, если в дальнейшем планируешь модифицировать их.
Если пустую строку не инициализируешь, то получишь при конкатенации "undefined" + строка
My1Name, и это всё логично если подумать: js не типизированый язык. Когда ты где-то делаешь int foo - то тут foo заведомо int, можно по умолчанию сделать 0, когда же ты в js делаешь let bar - тут совершенно непонятно что за значение там будет, потому по умолчанию там специальное значение undefined.
это всё логично если подумать: js не типизированый язык
- А разве не так? :) Какие типы данных существуют в js? — Признаюсь честно: Не читал даже документацию; пишу код с гуглом... Ни разу не видел, чтоб переменные были объявлены как int или string. Все данные, на сколько я понимаю — Object <String> или Object <ArrayList<String>> (в зависимости от типа селектора). И только в тех случаях, когда нужно работать с числами, переменные нужно инициализировать как number, задав им соответствующий параметр при объявлении, в данном случае == 0. Таким образом мы создаём параметризированный Object <Integer> А значение "undefined" - это не параметризированный Object <?> Правильно? var/let/const и др. объявления в js - определяют лишь область видимости (доступ к) переменной в разных частях кода, и при грамотном использовании - экономят вычислительные ресурсы?
My1Name, переменные - просто переменные, без каких либо данных о типе, в них может лежать что угодно(или не лежать - undefined). То что ты сделаешь let num = 0; не помешает тебе далее по коду сделать num = { foo: 'bar' } или даже num = funcion() {}.
Для оптимизации движки-интерпретаторы конечно угадывают и предполагают типы на лету, но это особенности реализации, а не самого языка.