2015-03-04 2 views
0

Поскольку я готовил функцию, я заметил, что она первоначально возвращалась «неопределенной» вместе с другой информацией, которую она должна была вернуть. Вот that function:Почему оператор '+ =' возвращает undefined?

foo = function(bar) { 
    var glorp; 
    if(typeof bar == 'undefined'){bar = 'baz'}; // there will be other conditions later 
    if('baz' == bar) { 
     glorp += 'this, '; 
     glorp += 'that, '; 
     glorp += 'the other'; 
     return glorp; 
    } 
} 

Я вызываю функцию:

$('#glorp').append(foo()); 

Возвращение заключается в следующем:

undefinedthis, что, с другой

когда я ожидал этого:

это, то другой

я сделал совсем немного копать, но я не смог найти ничего окончательного. Затем я изменил первый из операторов glorp на =, и неопределенное сообщение исчезло.

С glorp объявляется при открытии функции, которая должна быть определена в операторе if, и кажется, что это так, поскольку «это» успешно возвращается.

Что возвращается 'undefined'?

+6

Вы не инициализируете переменную. Первое, что вы делаете, это операция '+ =', и в этот момент значение переменной 'undefined'. – Pointy

+1

Начальное значение переменной 'undefined'. –

+1

Просто измените его на "var glorp =" ";" –

ответ

9

Поскольку

var glorp; //<--undefined 
console.log(glorp); //logs undefined 

glorp = glorp + "x"; // undefined + "x" -> "undefined" + "x" -> "undefinedx" 
console.log(glorp); //logs "undefinedx" 

набор его в пустую строку

var glorp = ""; 
+0

Если он не определен, то почему он возвращает значение «this», в то же время, когда он возвращает «undefined»? –

+1

@JayBlanchard: Поскольку вы добавляете '' this, '':' glorp + =' this, '; '. Это просто сокращение для 'glorp = glorp + 'this,';', которое оценивает 'glorp = undefined + 'this,';'. –

+1

Ах! Данг, мне действительно нужно выпить кофе. Благодаря @FelixKling –

3

Вы должны сделать glorp пустая строка в начале

var glorp = ""; 

Для вашего выхода, когда вы добавляете undefined + string составляет undefined строковое значение "undefined". Итак "undefined" + "this" = "undefinedthis".

Смежные вопросы