在JavaScript中,有3个函数可以把非数值转换为数值

1、Number()函数

Number()可以用于任意数据类型。

转换规则如下。

  • 如果是Boolean值,true和false将分别被转换为1和0。
  • 如果是数字值,只是简单的传入和返回。
  • 如果是null值,返回0。
  • 如果是undefined,返回Nan。
  • 如果是字符串,遵循下列规则:如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后再依照前面的规则转换返回的字符串值。
    • 如果字符串中只包含数字,则将其转换为十进制数值,即“1”会变成1,而“011”会变成11。
    • 如果字符串中包含有效的浮点格式,如“1.1”,则将其转换为对应的浮点数值。
    • 如果字符串中包含有效的十六进制格式,如“0xf”,则将其转换为相同大小的十进制整数值。
    • 如果字符串是空的,则将其转换为0。
    • 如果字符串中包含除上述格式之外的字符,将其转换为NaN。

看几个例子:

    var num1 = Number("Hello");  //NaN
var num2 = Number(""); //
var num3 = Number("0011"); //
var num4 = Number(true); //
var num5 = Number(1.1); //1.1

注:一元加操作符的操作与Number()函数相同。

由于Number()函数在转换字符串时比较复杂而且不够合理,因此在处理整数时更常用的是parseInt()函数。

2、parseInt()函数

parseInt()函数在转换字符串时,会忽略字符串前面的空格,直到找到第一个非空格字符。

如果第一个字符不是数字或者负号,parseInt() 就会返回NaN,同样的,用parseInt() 转换空字符串也会返回NaN(而Number()对空字符返回0)。

如果第一个字符是数字字符,parseInt() 会继续解析第二个字符,直到解析完所有后续字符串或者遇到了一个非数字字符。

例如,“1234blue”会被转换成1234,因为“blue”会被完全忽略。如果字符串中第一个字符是数字字符,parseInt()也能够识别各种整数格式(八进制、十进制、十六进制)。也就是说,如果字符串以“0x”开头且后面跟数字字符,就会将其当做一个十六进制整数;

如果字符串以“0”开头且后面跟数字字符,就会将其当做一个八进制数来解析;

看几个例子:

    var num1 = parseInt("1234blue");    //
var num2 = parseInt(""); //NaN
var num3 = parseInt("0xA"); //
var num4 = parseInt("22.5"); //
var num5 = parseInt("070"); //未定,70或者56
var num6 = parseInt("70"); //
var num7 = parseInt("0xf"); //

在ECMAScript3 JavaScript引擎中,“070”被当成八进制字面量,因此转换后是十进制56。而在ECMAScript5 JavaScript引擎中,parseInt()已经不具有解析八进制的能力,因此前导的零会被认为无效,从而将这个值当成“0”,结果就得到十进制的0。为了消除在使用parseInt()函数时可能导致上述的困惑,可以为这个函数提供第二个参数:转换时使用的基数(即多少进制)。

看几个例子:

  var num1 = parseInt("AF", 16);          //
var num2 = parseInt("AF");            //NaN
var num3 = parseInt("10", 2);           //2  (按照二进制解析)
var num4 = parseInt("10", 8);           //8  (按照八进制解析)
var num5 = parseInt("10", 10);          //10  (按照十进制解析)
var num6 = parseInt("10", 16);          //16  (按照十六进制解析)

注:多数情况下,我们要解析的都是十进制数值,因此将10作为第二个参数是非常有必要的。

3、parseFloat()函数

与parseInt() 函数类似,parseFloat() 也是从第一个字符(位置0)开始解析每个字符。而且也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。也就是说,字符串中第一个小数点是有效的,而第二个小数点就是无效的了,它后面的字符串将被忽略。例如,“22.3.34”将会被转换为22.3。

除了第一个小数点有效之外,parseFloat()parseInt()的第二个区别在于它始终忽略前导0。parseFloat()可以识别所有浮点数值格式,也包括十进制整数格式。但十六进制的字符串则始终被转换为0。

由于parseFloat()只解析十进制,因此它没有第二个参数指定基数的用法

如果字符串中包含的是一个可解析为整数的数(没有小数点,或者小数点后都是零),parseFloat() 会返回整数。

看几个例子:

        var num1 = parseFloat("1234blue");    //
var num2 = parseFloat(""); //NaN
var num3 = parseFloat("0xA"); //
var num4 = parseFloat("22.5"); //
var num5 = parseFloat("22.34.5"); //22.34
var num6 = parseFloat("09.5"); //9.5
var num7 = parseFloat("3.125e7"); //

JavaScript中的数值转换的更多相关文章

  1. 【前端】深入浅出Javascript中的数值转换

    由于Javascript是一门弱类型的语言,在我们的代码中无时无刻不在发生着类型转换,所以了解Javascript中的类型转换对于了解我们认识Javascript的运行原理至关重要. 本文主要从数值转 ...

  2. JavaScript之parseInt()数值转换常被忽略的问题

    使用parseInt()你可以从字符串中获取数值,该方法接受另一个基数参数,这经常省略,但不应该.当字符串以”0″开头的时候就有可能会出问题,例如,部分时间进入表单域,在ECMAScript 3中,开 ...

  3. javascript 数据类型之数值转换

    数值转换 一.有3个函数可以把非数值转换为数值: Number() parse Int() parse Float() 说明: 1.Number()可以用于任何数据类型,强转类型,如果不能把指转成数值 ...

  4. javaScript中eval()方法转换json对象

    <script language="javascript"> var user = '{name:"张三",age:23,'+ 'address:{ ...

  5. python与JavaScript中正则表达式如何转换

    使用python爬取网站数据的时候,总会遇到各种各样的反爬虫策略,有很大一部分都和JavaScript(以下简称为JS) 有关.在破解这些JS代码的过程中,经常会遇到模拟JS正则表达式的情况,因此,今 ...

  6. javascript 中关于对象转换数字值的一些特点

    下面是摘至<Javascript 高级程序设计第三版>里的一段话 是关于对象转换数字值的一些规则 "在应用于对象时,先调用对象的valueOf()方法以取得一个可供操作的值.然后 ...

  7. js中的数值转换

    js中有3个函数可以把非数值转换为数值:Number().parseInt().parseFloat().其中Number()可以用于任何数据类型.parseInt()及parseFloat()用于将 ...

  8. Javascript数值转换(string,int,json)

    数值: 在JavaScript中,数值转换一般有三种方式: 一.Number(param)函数:param可以用于任何数据类型 1.1 param是Boolean值,true和false分别转换为1和 ...

  9. JavaScript数值转换总结

    在JavaScript中,数值转换一般有三种方式: 一.Number(param)函数:param可以用于任何数据类型 1.1  param是Boolean值,true和false分别转换为1和0: ...

随机推荐

  1. 201521123088《Java程序设计》第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...

  2. java课程设计---团体

    课设题目:学生信息管理系统 一.团队成员介绍 周汉麟(组长):网络1511 201521123030 吴敏烽(组员):网络1512 201521123044 二.项目git地址 [课设] 吴敏烽 ht ...

  3. 201521123024 《Java程序设计》第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容.

  4. centOS 6启动流程

      centOS6启动流程 centOS6启动流程 linux内核组成 centos6启动大致流程 1.post加电自检 2.Boot Sequence 3.MBR引导 4.Grub启动 制作init ...

  5. lintcode.22 平面列表

    平面列表    描述 笔记 数据 评测 给定一个列表,该列表中的每个要素要么是个列表,要么是整数.将其变成一个只包含整数的简单列表. 注意事项 如果给定的列表中的要素本身也是一个列表,那么它也可以包含 ...

  6. [07] String字符串

    1.相同又不同的字符串 String str1 = new String("String"); String str2 = "String"; String s ...

  7. Spring Security研究(1)

      1, 获取Spring Security的Jar包 :从Spring网站下载页下载或者从Maven中央仓库下载.一个好办法是参考实例应用中包含的依赖库. 2,项目模块: Core - spring ...

  8. C#抓取数据、正则表达式+线程池初步运用

    去年底用 多线程+HtmlAgilityPack.dll 写了一个抓取“慧聪网” 公司信息的小程序,代码惨不忍赌.好在能抓到数据,速度也能让人忍受就很久没管了. 最近这段时间把这个小程序发给同事看着玩 ...

  9. JMeter关联(正则表达式提取器)

    关联:与系统交互过程中,系统返回的内容,需要在接下来的交互中用到,如防止csrf攻击而生成的token. 从前一个请求中取,用Regular Expression Extractor 正则表达式提取器 ...

  10. HDFS源码分析之NameNode(2)————Format

    在Hadoop的HDFS部署好了之后并不能马上使用,而是先要对配置的文件系统进行格式化.在这里要注意两个概念,一个是文件系统,此时的文件系统在物理上还不存在,或许是网络磁盘来描述会更加合适:二就是格式 ...