2016-05-13 37 views
0

我這個簡單的編碼挑戰玩弄扭轉一個字符串:初級變量聲明 - JavaScript的

function FirstReverse(str) { 
    var newStr; 
    for (var i = str.length - 1; i >= 0; i--) { 
    console.log(str.charAt(i)); 
    var newStr = newStr + str.charAt(i); 
    } 
    return newStr;   
} 
console.log(FirstReverse("hey")); 

結果成爲undefinedyeh,而不是僅僅yeh但是,當我將var newStr更改爲var newStr = '';時,它突然生效。

JavaScript認爲什麼數據類型newStr直到我將它分配給空白字符串?

+0

您需要使用'var newStr ='';'來初始化變量,並且不需要使用var for for循環來重新聲明它。 – jcubic

+0

JavaScript有時因未定義或「部分」定義的值而被批評爲奇怪的行爲。查看更多不可預知的結果,JavaScript從1:20開始:https://www.destroyallsoftware.com/talks/wat – Shaun

回答

3

如果你沒有初始化變量,它會從undefined開始(因爲你可能已經從結果中得出結論)。

未分配值的變量的類型爲undefined。如果 被評估的變量沒有指定值,則方法或語句也會返回undefined。如果沒有返回值,函數返回 undefined

2

什麼數據類型沒想到的JavaScript是newStr直到我分配到一個空字符串?

var myVar;只是聲明變量,但沒有指定初始值。沒有明確賦值的任何值都是undefined

因爲你的循環是自分配newStrnewStr = newStr + str.charAt(i);)第一次迭代將嘗試拼接undefined本身,它與串聯操作數(+)一起將迫使undefined"undefined"

1

如果初始化變量時未設置值,則將其設置爲undefined

我認爲建議爲每個初始化變量設置一個「默認值」。