2010-05-14 62 views
2

parseInt("7em", 10);返回7在我測試的所有瀏覽器[*]中。但我能依靠這個嗎?Javascript:parseInt()與尾隨字符

的原因,我想問的是,我要執行基於EM一些計算,像

/* elem1.style.top uses em units */ 
elem2.style.top = parseInt(elem1.style.top, 10) + 1 + "em"; 

我可以用正則表達式做到這一點,但parseInt函數更容易使用,而且可能更快一點。或者有另一種解決方案(可能使用jQuery)?

[*]測試到目前爲止上:IE 6,IE 8,Safari瀏覽器4,火狐3.6,歌劇10.5

回答

5

這是根據標準的行爲。 ECMA-262第15.1.2.2節規定:

parseInt可能只將字符串的前導部分解釋爲整數值;它會忽略任何不能被解釋爲整數表示的一部分的字符,並且沒有指出任何這樣的字符被忽略。

我會更擔心的是,在將來的某個時刻,elem2.style.top的單位將會改變。在這種情況下,此代碼可能會將200px轉換爲200em,這可能會導致大量混淆。

+0

謝謝,很好的答案(從規格最具體的片段)! – 2010-05-14 10:54:46

0

是。你可以依靠它。

1

爲什麼不走節約的道路,

parseInt(elem1.style.top.replace(/em/, ""), 10); 
+1

__always__包含基數! – 2010-05-14 10:45:12

+1

你只需要像'parseInt('08')''''''''''''''''''''''''''''''''''''''''''''''''這實際上最近在Chrome中剛剛發生了變化 - 他們擺脫了陷阱,並且很好。 – 2014-03-19 22:07:51

0

parseInt("7em", 10);總是會返回7,是的。 parseInt()返回字符串中的第一個值。

是的,parseInt比正則表達式更快,更易於使用。如果你使用jQuery? 那麼它不會幫助你在這個問題上的計算或解析,但確定你的其他代碼可能會更容易和更好。

http://www.w3schools.com/jsref/jsref_parseInt.asp