zoukankan      html  css  js  c++  java
  • Javascript中字符串转数字

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

    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
  • 相关阅读:
    多线程
    JS实现隔行变色及鼠标滑过变色
    通用存储过程
    三级嵌套
    网页内容,图片及连接 抓取通用类(转)
    获取文件夹中的图片
    上传图片生成缩略图指定生成图片宽高度边框颜色和填充颜色
    图片上传类
    ROW_NUMBER存储过程分页
    OPENDATASOURCE 链接远程数据库
  • 原文地址:https://www.cnblogs.com/justany/p/2882582.html
Copyright © 2011-2022 走看看