Почему возвращаемая строка содержит undefined?

29
11 июля 2018, 08:10

Недавно начал изучать JS и столкнулся с поведением в функции, которое мне не совсем понятно. Как параметр функция принимает массив из хэштегов, среди которых она ищет уникальные, и затем возвращает список таких хэштегов в виде строки (хэштеги разделяет запятая).

const separator = ", ";
function normalizeHashtags(hashtags) {
var uniqueValues = hashtags.filter(function(item, pos) {
    return hashtags.indexOf(item) == pos;
});
var normalizedHashtags;
for(var i = 0; i < uniqueValues.length; i++){
    if(i == uniqueValues.length - 1){
        normalizedHashtags += uniqueValues[i];
    } else{
        normalizedHashtags += uniqueValues[i] + separator;
    }
}
return normalizedHashtags;

}

Значение возвращаемой строки должно выглядеть следующим образом: tag1, tag2, tag3. Но, вместо этого я получал undefinedtag1, tag2, tag3.

Методом проб и ошибок я выяснил, что если строку var normalizedHashtags; изменить на var normalizedHashtags = "";, то можно получить желаемый результат. Нужно ли всегда поступать подобным образом и постоянно инициализировать переменные при их объявлении в JS?

Answer 1

Нужно инициализировать переменную перед ее использованием

var normalizedHashtags = "";

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

READ ALSO