2012-02-24 89 views
4

如果我寫這個劇本:parseInt()是否應該像這樣工作?

alert(parseInt("123blahblahblah456"));

我得到的警報,該值123

理想的情況下,不應該的功能不做任何事情,因爲它是一個無效的整數字符串? 類似的情況是parseFloat()

+2

方便的谷歌搜索提示:一個JavaScript函數的名稱後輸入「MDN」,例如,「parseInt函數MDN」,以及第一個搜索結果是幾乎總是在Mozilla開發者網絡的適當DOCO頁面。 – nnnnnn 2012-02-24 10:43:02

+1

當你解析CSS屬性時,這種行爲變得很方便,因爲有時它們包含一個單元:'parseInt(「120px」,10)' - >'120' – Ignitor 2012-09-08 16:43:03

回答

9

是的:parseInt()絕對是這樣工作的;引用Mozilla開發者網絡條目:

的parseInt函數功能第一個參數轉換爲字符串,分析它,並返回一個整數或NaN。如果不是NaN,則返回的值將是第一個參數的十進制整數表示形式,該形式以指定基數(base)中的數字形式表示。例如,基數爲10表示從十進制數,8個八進制數,16個十六進制數等轉換而來。對於10以上的基數,字母表中的字母表示數字大於9.例如,對於十六進制數字(基數爲16),使用A到F.

如果parseInt遇到不是指定基數中的數字的字符,它會忽略它和所有後續字符,並返回解析到該點的整數值。 parseInt將數字截斷爲整數值。前後空格是允許的。

似乎parseInt()明確希望獲得一個字符串,並會採取數的第一序列(直到遇到一個無效的數字字符)並返回多項任何基地是在基數參數中指定的。

parseInt('123odod24',10); // for base-10 
parseInt('123odod24',16); // for base-16 

參考:

  • parseInt() at the MDC

    順便說一句,解析傳遞給parseInt()的字符串時記得使用基數參數,例如,以減少錯誤。

10

parseInt試圖解析字符串,直到它找到一個非整數值,此時它返回它所有的值。

因此,如果字符串是:

  • 1234ABCD - 它返回1234
  • 1a3f - 它返回1
  • a14883 - 它返回NaN
  • 1.5 - 它返回1
  • -1.3 a - 返回-1

parseFloat相同除了t帽子不會在.

  • 1234ABCD突破 - 它返回1234
  • 1a3f - 它返回1
  • a14883 - 它返回NaN
  • 1.5 - 它返回1.5
  • -1.3a - 它返回-1.3
-1

是的!像在這裏說明一下:http://www.w3schools.com/jsref/jsref_parseInt.asp

提示和注意

注意:只有返回字符串中的第一個數字!

注意:允許使用前導和尾隨空格。

注意:如果第一個字符不能轉換爲數字, parseInt()返回NaN。

解析不同的字符串:

<script type="text/javascript"> 

document.write(parseInt("10") + "<br />"); 
document.write(parseInt("10.33") + "<br />"); 
document.write(parseInt("34 45 66") + "<br />"); 
document.write(parseInt(" 60 ") + "<br />"); 
document.write(parseInt("40 years") + "<br />"); 
document.write(parseInt("He was 40") + "<br />"); 

document.write("<br />"); 
document.write(parseInt("10",10)+ "<br />"); 
document.write(parseInt("010")+ "<br />"); 
document.write(parseInt("10",8)+ "<br />"); 
document.write(parseInt("0x10")+ "<br />"); 
document.write(parseInt("10",16)+ "<br />"); 

</script> 

代碼的輸出將是:

10 
10 
34 
60 
40 
NaN 

10 
8 
8 
16 
16 
2

這是documented to behave like that

如果parseInt遇到一個字符是不是在 指定基數的數字,卻忽視了它,所有隨後的字符和 返回解析到這一點整數值。

這種行爲是否是一個好主意是另一回事,但現在改變它已經太遲了。

3

這是它是如何工作的。它解析字符串直到達到非數字字符。

您可能感興趣的檢查出功能isFinite(),它會檢查羯羊一個字符串是有限的,合法的數字:

isFinite("123"); // true 
isFinite("123a");// false 

但是這會爲空字符串和空白返回true。因此,您可以通過編寫

mystring = "123"; 
mystringb = " "; 
!isNaN(parseInt(mystring)) && isFinite(mystring); // true 
!isNaN(parseInt(mystringb)) && isFinite(mystringb); // false 

根據這些建議,我敢肯定,你可以建立自己的功能,將忽略包含非數字字符的任意字符串改善這種解決方案。

10

是的,比較所有的肛門。我想補充一點,這就是爲什麼檢查某個值是否可以轉換爲數字,最好使用Number

Number("123blahblahblah456"); //=> NaN 
Number("123"); //=> 123 
// if the conversion result needs to be an int 
Math.round(Number("123.4567")); //=> 123 
+0

不錯的提示..不知道數字部分...謝謝(你的)信息.. – Vrushank 2012-02-24 14:58:39

相關問題