Javascript中字符串转数字

系统 1456 0

我们知道最简洁的数字转字符串方法是:

        
          var
        
         num = 123
        
          ;

        
        
          var
        
         string = num + "";
      

也就是在数字后面加上一个空字符。那么最简洁字符串转数字方法呢?

 

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

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

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

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

      alert("45" - "32"); 
      
        //
      
      
        13
      
    
      alert("5" * "6"); 
      
        //
      
      
        30
      
    
      alert("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); 
      
        //
      
      
        number
      
    

jQuery中有一个这个方法的应用,比如我们得到一个字符串怎么判断他能不能当成数字看待呢?jQuery的方法:

      
        var
      
       string = "321";  
      
        //
      
      
        这个是得到的字符串,随意是什么
      
      
alert(+string + "" === string);  
      
        //
      
      
        true表示可以当成数字,否则不行 
      
    

我们注意到,如果string = "000",那么返回是false。

但实际上jQuery是为了获取HTML5里的data-Attribute的属性,由于data-Attribute属性返回的必然是字符串。如果字符串是"000",那么也不应当将其看做是数字0。

thanks  shuaisam

如果要得到字符串是不是由纯数字组成可以这么判断:

      
        var
      
       string = "000"
      
        ;
alert(
      
      +string + "" !== "NaN");
    

其实利用这个特性还有其他方法,比如:

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

 

进制问题 

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 & IE
      
    
      alert(parseInt("010")); 
      
        //
      
      
        10 in Chrome
      
    

╮(╯_╰)╭ 难怪很少见到Javascript中用到8进制,如果要确保8进制只能使用parseInt的第二个参数了:

      alert(parseInt("010", 8)); 
      
        //
      
      
        8
      
    

parseFloat继续不认识8进制,所以:

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

 

 

Javascript中字符串转数字


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论