2013-10-11 90 views
1

那裏嗨,JS警報顯示 '未定義'

我剛剛從C#/ C++移動與JavaScript昨晚,和我愛它!

我剛剛碰到一些行爲,我不明白,想知道如果任何人都可以在上面提供一些線索?

當我調用這個腳本時,我得到了預期的警告框,顯示'5.5',但是在該框關閉後,我得到另一個警報,簡單地顯示「未定義」,任何人都可以對此有所瞭解?下面

代碼:

var myObj = { 

age : 5, 
weight : 5.5, 

toString : function(){ 
    alert(this.weight); 
} 

} 

alert(myObj.toString()); 

非常感謝

+3

你有兩個'警報的事實()'在你的代碼的功能可能是一個暗示,爲什麼你會得到兩個'alert'盒;) –

+0

問題不在於爲什麼我有兩個警報......這爲什麼第二次顯示未定義,現在已經回答。非常感謝 –

回答

6

代碼調用alert()兩次。

第一個提醒是顯示this.weight之一。但隨後的第二顯示任何值從myObj.toString()函數返回的,因爲你已經編碼的功能沒有明確的返回值,它默認返回undefined

通常一個.toString()函數實際上會返回一個字符串,所以你應該這樣做:

toString : function(){ 
    return this.weight.toString(); 
} 

然後你只得到一個警告,如下所示:http://jsfiddle.net/eph7x/

事實上,你可以簡單地使用:

alert(myObj); 

...因爲您的自定義.toString()將得到自動調用。

+0

ThankYou!我原來只是調用myObj,沒有意識到它會自動調用我的toString!感謝您指出返回大聲笑,得到一點點過於無需定義類型哈哈!將在可用時接受答案。 –

+0

不客氣。對於沒有定義類型,請記住,JS也確實有不同的類型,例如,字符串,數字,對象 - 它只是任何變量可以保存任何類型的值。 – nnnnnn

+0

是啊,我得到的是他們在運行時解釋,這是非常甜蜜!儘管如此,仍然更喜歡強類型。 –