2014-12-04 33 views
3

我在傳遞一個參數時尋找了一個麻煩的JavaScript錯誤,但是當它被接收時,它完全不同。我修好了,但想知道未來的參考情況。瞭解Javascript中的隱式轉換

我應該作爲參數傳遞的是'0616'(帶引號)。我實際上通過的是0616(沒有引號)。

所以,當它被接收時,發生了某種隱式數字轉換,它被接收爲398.我理解隱式和顯式轉換,但是將0616轉換爲398時發生了什麼。前導零似乎有與它有關,因爲我通過的其他值在最重要的數字中是非零的。只有那些從零開始的?

但398和'0616'之間有什麼關係?

任何想法?

+0

http://stackoverflow.com/questions/9071696/javascript-why-treated-as-octal – BatScream 2014-12-04 01:09:45

回答

2

原因在於前導零是基於八進制的javascript符號,例如, 010 = 8。十六進制的記號是前導0x,例如, 0x10 = 16

5

啊啊魔法世界的javascript!

任何以0開頭的數字文字都被視爲八進制數字。

哈克解決方法是

parseInt('0616', 10) 
+0

對不起,我以前的評論,但我認爲'parseInt函數( '0616',10)'會更安全,如果他仍然需要支持一些舊的瀏覽器,這些瀏覽器會解釋爲八進制。 – Leo 2014-12-04 01:30:02

+0

好的電話,我會補充說:) – 2014-12-04 01:31:55

3

0616是舊八進制數格式。在新規格中應該是0o616,但舊格式仍受瀏覽器支持。

見本wiki page

前綴0O引入....,它是旨在由ECMAScript的支持6(前綴0已經氣餒ECMAScript中3和ECMAScript的5下降)。