2015-11-23 87 views
1

有人可以解釋下面的行爲,它是關於JS中的臨時包裝對象,但是當我嘗試在數字文字上使用它們時,它們會失敗。我錯了還是最近變了,我嘗試了V8和Gecko,同樣的故事。JS包裝對象奇怪的行爲

'stringWrapper'.charAt(0); 
    "s" 
    1.toString(); 
    VM8363:2 Uncaught SyntaxError: Unexpected token ILLEGAL(…)InjectedScript._evaluateOn @ VM8253:875InjectedScript._evaluateAndWrap @ VM8253:808InjectedScript.evaluate @ VM8253:664 
    typeof 1 
    "number" 
    (1+0).toString(); 
    "1" 
    typeof (1+0) 
    "number" 

回答

1

這是在JavaScript等動態類型語言,如Python,在那裏你可以調用一個整數的方法或訪問屬性了一個有趣的「功能」。

實際發生的事情是,引擎將1.toString()視爲浮點數,其中toString()部分是第一位小數。

解決方法是雙擊它,1..toString()並省略尾隨小數或將括號中的數字包圍在括號(1).toString()中以評估該數字,然後對結果調用toString

+0

嘿這個有趣的,是的,也許我看到的,沒有任何問題這個工作在Python不是JS :)。雙點也有效:)謝謝 –

+0

它不會在Python中工作。嘗試在Python中評估'1.real'。你會得到一個語法錯誤,或者雙點或者括起來,但是它可以在Ruby中正常工作。 –

0

更有趣的JavaScript事情:1 .toString()是有效的! 1. toString()不是。

您可以奇怪的JavaScript享受Kyle Simpson's video怪癖