Javascript中字符串转数字方法介绍

 字符串转数字的方法有几种,下面我来来给大家介绍js字符串转数字的一些具体操作方法与解决方案有需要的朋友可参考参考。

我们知道最简洁的数字转字符串方法是:强制类型转换

整数要转换成字符串,必须使用Integer.toString()静态方法或者String.valueOf()静态方法,把字符串转换为整数,必须使用Integer.valueOf()。
可见,不能把JavaScript中的类型转换看作为“强制类型转换”。

还可使用强制类型转换(type casting)处理转换值的类型。使用强制类型转换可以访问特定的值,即使它是另一种类型的。

ECMAScript中可用的3种强制类型转换如下:

Boolean(value)——把给定的值转换成Boolean型;

Number(value)——把给定的值转换成数字(可以是整数或浮点数);

String(value)——把给定的值转换成字符串。

用这三个函数之一转换值,将创建一个新值,存放由原始值直接转换成的值。这会造成意想不到的后果。

当要转换的值是至少有一个字符的字符串、非0数字或对象(下一节将讨论这一点)时,Boolean()函数将返回true。如果该值是空字符串、数字0、undefined或null,它将返回false。

可以用下面的代码段测试Boolean型的强制类型转换,代码如下:

 
  1. Boolean("");   //false   –   empty   string   
  2. Boolean("hi");   //true   –   non-empty   string   
  3. Boolean(100);   //true   –   non-zero   number   
  4. Boolean(null);   //false   -   null   
  5. Boolean(0);   //false   -   zero   
  6. Boolean(new   Object());   //true   –   object  

Number()的强制类型转换与parseInt()和parseFloat()方法的处理方式相似,只是它转换的是整个值,而不是部分值。还记得吗,parseInt()和parseFloat()方法只转换第一个无效字符之前的字符串,因此 "4.5.6 "将被转换为 "4.5 "。用Number()进行强制类型转换, "4.5.6 "将返回NaN,因为整个字符串值不能转换成数字。如果字符串值能被完整地转换,Number()将判断是调用parseInt()方法还是调用parseFloat()方法。下表说明了对不同的值调用Number()方法会发生的情况:

用  法 结  果

 
  1. Number(false)  0   
  2. Number(true)  1   
  3. Number(undefined) NaN   
  4. Number(null)  0   
  5. Number( "5.5 ")  5.5   
  6. Number( "56 ")  56   
  7. Number( "5.6.7 ") NaN   
  8. Number(new   Object())  NaN   
  9. Number(100)  100   

代码如下:

 
  1. <div style="background-color:#FFCC99; width:400px; margin:0px; padding:5px">  
  2. <script language="javascript" type="text/javascript">  
  3. function checkForm(){  
  4.       
  5.     var age2;  
  6.     age2 = Number(document.frmTest.age.value) + 1;   
  7.     document.frmTest.age2.value = age2;   
  8.     /* 
  9.     var salesforce_para;  
  10.     salesforce_para = "name=" + document.frmTest.name.value;  
  11.     salesforce_para += "&" + "age=" + document.frmTest.age.value; 
  12.     var targetUrl = "test_js.php?" + salesforce_para;  
  13.     window.location = targetUrl; 
  14.     */  
  15. }  
  16. </script>  
  17. <form action="test_js.php" method="post" name="frmTest">  
  18. <!--姓名:<input type="text" name="name"><br />-->  
  19. 年龄:<input type="text" name="age"><br />  
  20. <input type="button" name="submit" value="提交->>查看虚岁" onClick="checkForm()"><br />  
  21. 虚岁:<input type="text" name="age2">  
  22. </form>  
  23. </div>  

字符串只能进行加法(拼接)

字符串进行加法(拼接)是很常见的,但是字符串进行减法、乘法、除法呢?

这似乎很难定义,实际上字符串没有减法、乘法、除法操作。

但Javascript是动态语言,如果你拿两个字符串进行这三种操作的时候,他会尝试将其转成数字再进行相应的操作。例如:

 
  1. alert("45" - "32"); //13alert("5" * "6"); //30alert("12" / "3"); //4  

但这种转换操作和parseInt和parseFloat不太像,而和Number比较像,比如:

 
  1. alert("123a" - "2bc"); //NaN  
  2. alert(parseInt("123a") - parseInt("2bc")); //121  
  3. alert(Number("123a") - Number("2bc"));  

NaN也就是说,这种转换和Number一样,会将非纯数字型字符串转成NaN,表示其是非数字。

而parseInt、parseFloat则会取出字符串中取出前面的能表示成数字的部分,而忽略掉后面不能表示成数字的部分。

最简洁的字符串转数字方法,借助字符串在进行其不能进行的运算时会先尝试转成数字这个特性。我们可以对字符串前加上正符号来将字符串转成数字,如:

 
  1. var num = +"45";  
  2. alert(typeof num); //numberjQuery中有一个这个方法的应用,比如我们得到一个字符串怎么判断他是不是只有数字呢?jQuery的方法:  
  3. var string = "321";  //这个事得到的字符串,随意是什么  
  4. alert(+string + "" === string);  //true表示是数字字符串,否则不是 其实利用这个特性还有其他方法,比如:  
  5. var num = "45" - 0;  
  6. alert(typeof num); //numbervar num = "45" * 1;  
  7. alert(typeof num); //numbervar num = "45" / 1;  
  8. alert(typeof num); //number  

例如,如果要把字符串 "1234blue "转换成整数,那么parseInt()将返回1234,因为当它检测到字符b时,就会停止检测过程。字符串中包含的数字字面量会被正确转换为数字,因此字符串 "0xA "会被正确转换为数字10。不过,字符串 "22.5 "将被转换成22,因为对于整数来说,小数点是无效字符,一些示例如下:

 
  1. parseInt("1234blue");   //returns   1234   
  2. parseInt("0xA");   //returns   10   
  3. parseInt("22.5");   //returns   22   
  4. 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进制进行相应的转换,字符串的自动转换也是这般:

 
  1. alert(parseInt("0x10")); //16  
  2. alert(Number("0x10")); //16  
  3. alert(+"0x10");  

16不过parseFloat有些闹别扭,他不认识16进制,结果变成这样:

alert(parseFloat("0x10")); //0更悲剧的是0开头的,我们知道0开头可以用来表示8进制,在Number和字符串自动转换中,0开头会当成十进制来获取,如:

 
  1. alert(Number("010")); //10  
  2. alert(+"010"); //10而parseInt中却很悲催,ECMAScript中并未对此进行强制规定所以出现了下面的情况:  
  3. alert(parseInt("010")); //8 in Firefox & IEalert(parseInt("010"));  
  4. //10 in Chrome?(?_?)? 难怪很少见到Javascript中用到8进制,如果要确保8进制只能使用parseInt的第二个参数了:  
  5. alert(parseInt("010", 8)); //8parseFloat继续不认识8进制,所以:  
  6. alert(parseFloat("010")); //10  
  7.  
 

扫一扫手机访问