2009-01-12 135 views
1

我想通過一個數字到我的JavaScript函數,但實際上錯誤的值正在通過。我在這裏給整個代碼:JavaScript函數參數

<html> 
<head> 
<script type="text/javascript"> 
function test(num) 
{ 
/*It should alert as 01004 or 1004 but to my surprise it's alerting as 516!*/ 
alert(num); 
} 
</script> 
</head> 
<body> 
<a href="javascript:test(01004);">Test it!</a> 
</body> 
</html> 

在上面的代碼,而不是01004,如果我把它作爲10040我收到的警告框正確的值。

關於這個奇怪的情況的任何想法?

在此先感謝。

+0

您可以將此問題重命名爲更具描述性的內容,例如「爲什麼JavaScript數值文字評估爲意外值? – 2009-01-12 09:50:21

回答

10

以零開始被解釋爲八進制,所以寫01004是正是一樣寫516

一些其他答案建議使用數字文字parseInt裏面函數將八進制值轉換爲十進制。

這不會幫助,因爲數值516被傳遞給函數。如果你要求parseInt給你一個基數10的解釋,你會得到516!

解決此問題的方法是丟失前導零,或者如果需要零,則將其設置爲字符串文字而不是數字,並在函數內部使用parseInt(num,10)。

6

前導零可能使其認爲數字是八進制數。

更新:感謝@保羅迪克森慢跑我的頭腦有點今天早上醒來。 01004是一個文字,所以沒有任何數量的事後解析,即parseInt,將會更新數字的底部。你需要去掉代碼中的前導0以使其成爲1004(最簡單的解決方案),或者在將文本發送到parseInt(這是我無法理解的更多工作)之前,在文字周圍加上引號使其成爲一個字符串。

+0

感謝您的快速回復! 我嘗試了數字上的parseInt,但仍然在警報框中獲得516。我應該將01004轉換爲數字,甚至在我將它傳遞給JavaScript函數之前! – Veera 2009-01-12 09:32:13

+0

有趣的是,如果我在`test`的主體中放置了一個明確的parseInt(num,10),它仍然是壞的。如果我用引號將01004換行,例如test('01004'),它就可以工作。 – 2009-01-12 09:40:03

0

報價數量 - > '01004'

編輯:我看到parseInt函數( '01004',10)正常工作...我真的不知道爲什麼parseInt函數(01004,10)不

EDIT2:好的,感謝保羅·迪克森

+0

這確實解決了它,但我不明白爲什麼。 – 2009-01-12 09:40:47

+0

這隻適用,因爲它不再是一個數字,它是一個字符串......從原來的問題,我假設一個數字是必需的。 – James 2009-01-12 09:42:17

1

恭喜,您是第100萬名客戶,因爲他們是以B語言(因此C)出現的語言,被八進制文字絆倒。

你的獎勵是領導Ken Thompson家門外的乾草叉遊行。