Javascript中字串轉數字方法介紹

來源:互聯網
上載者:User

們知道最簡潔的數字轉字串方法是:

強制類型轉換

整數要轉換成字串,必須使用Integer.toString()靜態方法或者String.valueOf()靜態方法,把字串轉換為整數,必須使用Integer.valueOf()。
可見,不能把JavaScript中的類型轉換看作為“強制類型轉換”。


還可使用強制類型轉換(type casting)處理轉換值的類型。使用強制類型轉換可以訪問特定的值,即使它是另一種類型的。
ECMAScript中可用的3種強制類型轉換如下:
Boolean(value)——把給定的值轉換成Boolean型;
Number(value)——把給定的值轉換成數字(可以是整數或浮點數);
String(value)——把給定的值轉換成字串。
用這三個函數之一轉換值,將建立一個新值,存放由原始值直接轉換成的值。這會造成意想不到的後果。
當要轉換的值是至少有一個字元的字串、非0數字或對象(下一節將討論這一點)時,Boolean()函數將返回true。如果該值是Null 字元串、數字0、undefined或null,它將返回false。

可以用下面的程式碼片段測試Boolean型的強制類型轉換。

 代碼如下 複製代碼

Boolean("");   //false   –   empty   string
Boolean("hi");   //true   –   non-empty   string
Boolean(100);   //true   –   non-zero   number
Boolean(null);   //false   -   null
Boolean(0);   //false   -   zero
Boolean(new   Object());   //true   –   object

Number()的強制類型轉換與parseInt()和parseFloat()方法的處理方式相似,只是它轉換的是整個值,而不是部分值。還記得嗎,parseInt()和parseFloat()方法只轉換第一個無效字元之前的字串,因此 "4.5.6 "將被轉換為 "4.5 "。用Number()進行強制類型轉換, "4.5.6 "將返回NaN,因為整個字串值不能轉換成數字。如果字串值能被完整地轉換,Number()將判斷是調用parseInt()方法還是調用parseFloat()方法。下表說明了對不同的值調用Number()方法會發生的情況:

用  法  結  果
Number(false)  0
Number(true)  1
Number(undefined) NaN
Number(null)  0
Number( "5.5 ")  5.5
Number( "56 ")  56
Number( "5.6.7 ") NaN
Number(new   Object())  NaN
Number(100)  100 

代碼如下:

 代碼如下 複製代碼

<div style="background-color:#FFCC99; width:400px; margin:0px; padding:5px">
<script language="javascript" type="text/javascript">
function checkForm(){
   
    var age2;
    age2 = Number(document.frmTest.age.value) + 1;
    document.frmTest.age2.value = age2;
    /*
    var salesforce_para;
    salesforce_para = "name=" + document.frmTest.name.value;
    salesforce_para += "&" + "age=" + document.frmTest.age.value;
    var targetUrl = "test_js.php?" + salesforce_para;
    window.location = targetUrl;
    */
}
</script>

<form action="test_js.php" method="post" name="frmTest">
<!--姓名:<input type="text" name="name"><br />-->
年齡:<input type="text" name="age"><br />
<input type="button" name="submit" value="提交->>查看虛歲" onClick="checkForm()"><br />
虛歲:<input type="text" name="age2">
</form>
</div>

 

字串只能進行加法(拼接)

字串進行加法(拼接)是很常見的,但是字串進行減法、乘法、除法呢?

這似乎很難定義,實際上字串沒有減法、乘法、除法操作。

但Javascript是動態語言,如果你拿兩個字串進行這三種操作的時候,他會嘗試將其轉成數字再進行相應的操作。例如:

 代碼如下 複製代碼
alert("45" - "32"); //13alert("5" * "6"); //30alert("12" / "3"); //4

但這種轉換操作和parseInt和parseFloat不太像,而和Number比較像,比如:

 代碼如下 複製代碼
alert("123a" - "2bc"); //NaN
alert(parseInt("123a") - parseInt("2bc")); //121
alert(Number("123a") - Number("2bc"));

 //NaN也就是說,這種轉換和Number一樣,會將非純數字型字串轉成NaN,表示其是非數字。

而parseInt、parseFloat則會取出字串中取出前面的能表示成數位部分,而忽略掉後面不能表示成數位部分。

 

最簡潔的字串轉數字方法

藉助字串在進行其不能進行的運算時會先嘗試轉成數字這個特性。我們可以對字串前加上正符號來將字串轉成數字。如:

 代碼如下 複製代碼

var num = +"45";
alert(typeof num); //numberjQuery中有一個這個方法的應用,比如我們得到一個字串怎麼判斷他是不是只有數字呢?jQuery的方法:

var string = "321";  //這個事得到的字串,隨意是什麼
alert(+string + "" === string);  //true表示是數字字串,否則不是 其實利用這個特性還有其他方法,比如:

var num = "45" - 0;
alert(typeof num); //numbervar num = "45" * 1;
alert(typeof num); //numbervar num = "45" / 1;
alert(typeof num); //number


例如,如果要把字串 "1234blue "轉換成整數,那麼parseInt()將返回1234,因為當它檢測到字元b時,就會停止檢測過程。字串中包含的數字字面量會被正確轉換為數字,因此字串 "0xA "會被正確轉換為數字10。不過,字串 "22.5 "將被轉換成22,因為對於整數來說,小數點是無效字元。一些樣本如下:

 代碼如下 複製代碼

parseInt("1234blue");   //returns   1234
parseInt("0xA");   //returns   10
parseInt("22.5");   //returns   22
parseInt("blue");   //returns   NaN

parseInt()方法還有基模式,可以把二進位、八進位、十六進位或其他任何進位的字串轉換成整數。基是由parseInt()方法的第二個參數指定的,所以要解析十六進位的值,需如下調用parseInt()方法:

 代碼如下 複製代碼
parseInt("AF",   16);   //returns   175

當然,對二進位、八進位,甚至十進位(預設模式),都可以這樣調用parseInt()方法:

 代碼如下 複製代碼
parseInt("10",   2);   //returns   2
parseInt("10",   8);   //returns   8
parseInt("10",   10);   //returns   10

如果十進位數包含前置0,那麼最好採用基數10,這樣才不會意外地得到八進位的值。例如:

 代碼如下 複製代碼
parseInt("010");   //returns   8
parseInt("010",   8);   //returns   8
parseInt("010",   10);   //returns   10

在這段代碼中,兩行代碼都把字串 "010 "解析成了一個數字。第一行代碼把這個字串看作八進位的值,解析它的方式與第二行代碼(聲明基數為8)相同。最後一行代碼聲明基數為10,所以iNum3最後等於10。


進位問題

0x開頭的是16進位,所以Number和parseInt都會對16進位進行相應的轉換,字串的自動轉換也是這般:

 代碼如下 複製代碼
alert(parseInt("0x10")); //16
alert(Number("0x10")); //16
alert(+"0x10");

 //16不過parseFloat有些鬧彆扭,他不認識16進位,結果變成這樣:

alert(parseFloat("0x10")); //0更悲劇的是0開頭的,我們知道0開頭可以用來表示8進位,在Number和字串自動轉換中,0開頭會當成十進位來擷取,如:

 代碼如下 複製代碼

alert(Number("010")); //10
alert(+"010"); //10而parseInt中卻很悲催,ECMAScript中並未對此進行強制規定所以出現了下面的情況:

alert(parseInt("010")); //8 in Firefox & IEalert(parseInt("010"));

//10 in Chrome?(?_?)? 難怪很少見到Javascript中用到8進位,如果要確保8進位只能使用parseInt的第二個參數了:

 代碼如下 複製代碼

alert(parseInt("010", 8)); //8parseFloat繼續不認識8進位,所以:

alert(parseFloat("010")); //10

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.