JS中parseInt()、Numer()深度解析

JS中字符串转换为数字有两种方式:

1、parseInt函数

定义:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/parseInt

语法:parseInt(string [ , radix])

参数:

string:要被解析的值。如果参数不是一个字符串,则将其转换为字符串。字符串开头的空白符将会被忽略。

radix:一个2到36之间的整数值,用于指定转换中采用的基数。

如果省略该参数或者为0,则数字将以 10 为基础来解析。

如果string以 “0x” 或 “0X” 开头,将以 16 为基数。

如果string以“0” 开头,在ECMA3中被认为是8进制;但是在ECMA5中已经强制规定此情况默认是10进制

如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。

在ECMA规范中,对于parseInt函数解析字符串为数字的步骤如下:

看看V8中parseInt函数的源码:【只列出一部分,如需要查看请参见V8中src/conversions-inl.h和src/compiler/js-builtin-reducer.cc】

if (radix == 0) { //如果传入radix是0,则以10进行处理
    // Radix detection.
    radix = 10;
    if (*current == ‘0‘) {
      ++current;
      if (current == end) return SignedZero(negative);
      if (*current == ‘x‘ || *current == ‘X‘) {
        radix = 16;
        ++current;
        if (current == end) return JunkStringValue();
      } else {
        leading_zero = true;
      }
    }
  } else if (radix == 16) { //16进制
    if (*current == ‘0‘) {
      // Allow "0x" prefix.
      ++current;
      if (current == end) return SignedZero(negative);
      if (*current == ‘x‘ || *current == ‘X‘) {
        ++current;
        if (current == end) return JunkStringValue();
      } else {
        leading_zero = true;
      }
    }
  }

  if (radix < 2 || radix > 36) return JunkStringValue(); //radix不在2~36之间的处理

  

例如解析:

parseInt(‘0101‘ , 1)   => NaN

parseInt(‘453‘ , 2) => NaN  因为453不符合二进制数字,所以无法转换出正确的数字

2、Number()函数

定义:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number

计算步骤:

两种方法的区别:

参考链接:http://www.w3school.com.cn/js/pro_js_typeconversion.asp

用 Number() 进行强制类型转换,并且是转换整个字符串值,如果整个字符串不能转换成数字,则输出NaN。

例如:

parseInt(‘01a02‘, 10)  => 1    parseInt(‘1.22.22‘, 10) => 1         parseInt(‘1.22‘ , 10) => 1

Number(‘01a02‘) => NaN      Number(‘1.22.22‘) => NaN          Number(‘1.22‘)  =>  1.22

JS中数字利用parseInt进行转换成整数:

由parseInt中定义:parseInt是用于将字符串根据基数转换成整数,如果传入参数不是字符串,会首先利用toString方法转换为字符串,再转换为整数

例子:

parseInt(0.000001)   =>  0    parseInt(‘0.000001‘)    =>  0

parseInt(0.0000001) => 1     parseInt(‘0.0000001‘)  =>  0

转换0.000001和0.0000001数字时出现结果不同,那么先将看看这两个数字转换为字符串的结果:

var a = 0.000001   ;   a.toString() ;  => ‘0.000001‘

var b = 0.0000001 ;   b.toString() ;  => ‘1e-7‘

由此不难看出:为什么会出现上述结果。

究其原因:在ECMA规范中

可以解释0.000001和0.0000001转换为字符串后的不同结果。

所以在日常使用parseInt函数时:常用的情况无非为将字符串转换为整数或者将数字转换为整数,所以在使用将数字转换为整数时,最好需要进行判断

function newParseInt(value) {

     if(typeof value === ‘number‘) {

         return Math.floor(value);

    }

    return parseInt(value);

}

时间: 2024-10-12 09:05:08

JS中parseInt()、Numer()深度解析的相关文章

浅谈 js中parseInt函数的解析[转]

首先还是从很热门的实例parseInt("09")==0说起. parseInt(number,type)这个函数后面如果不跟第2个参数来表示进制的话,默认是10进制. 比如说parseInt("010",10)就是10进制的结果:10,parseInt("010",2)就是2进制的结果:2,parseInt("010",8)就是8进制的结果:8,parseInt("010",16)就是16进制的结果:16

浅谈 js中parseInt函数的解析

首先还是从很热门的实例parseInt("09")==0说起. parseInt(number,type)这个函数后面如果不跟第2个参数来表示进制的话,默认是10进制. 比如说parseInt("010",10)就是10进制的结果:10,parseInt("010",2)就是2进制的结果:2,parseInt("010",8)就是8进制的结果:8,parseInt("010",16)就是16进制的结果:16

js中parseint的使用

parseInt() 方法首先查看位置 0 处的字符,判断它是否是个有效数字:如果不是,该方法将返回 NaN,不再继续执行其他操作.但如果该字符是有效数字,该方法将查看位置 1 处的字符,进行同样的测试.这一过程将持续到发现非有效数字的字符为止,此时 parseInt() 将把该字符之前的字符串转换成数字. 一.语法 parseInt(string, radix) 二."string" 参数应用的详细规则  (以 10进制为例) 1.如果都是字母, 返回:NaN parseInt(&q

JS中对JOSN的解析

一.什么是JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式, 是理想的数据交换格式,同时,JSON是 JavaScript 原生格式. 非常适合于服务器与 JavaScript 的交互 二.为什么使用JSON而不是XML 他们都是这样说的: 尽管有许多宣传关于 XML 如何拥有跨平台,跨语言的优势,然而,除非应用于 Web Services,否则,在普通的 Web 应用中,开发者经常为 XML 的解析伤透了脑筋

js中State模式的解析及运用

 状态模式,在大的范畴中的定义为当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类.每种编程语言有不同的实现方式,运用的范围也多用于游戏之中. 这里我用javascript来模拟状态模式,主要思想是通过事件监听的效果来控制一个主要对象的状态.那么何为事件监听的效果呢?在其他语言中,可以通过多个对象的协作来完成状态模式,而我在javascript中可以通过对DOM节点进行事件操控来传递消息,使主要对象接收消息(当然不同状态接收到的消息所产生的反应是不一样的).而在javascr

js的new操作符深度解析

引言 我们都知道new操作符在js中一般是用来创建一个构造函数的实例,它在创建实例具体做了什么,MDN文档是这么说的: 我一开始看到,完全没有任何的头绪和理解,到底什么意思,后面通过上网查阅了大量的资料,对new操作符有了初步的认识. 1.创建一个空的简单JavaScript对象(即{}): 2.链接该对象(即设置该对象的构造函数)到另一个对象 : 3.将步骤1新创建的对象作为this的上下文 : 4.如果该函数没有返回对象,则返回this. 普通函数和构造函数的区别 在js中 普通函数和构造函

JS中如何更加深度的复制对象

面试收集:如何深度的复制 var json = {a:6,b:4,c:[1,2,3]}; var json2 = clone(arr); console.log(json2['b']); //4 function clone(obj){ var oNew = new obj.constructor(obj.valueOf()); if(obj.constructor == Object){ for(var i in obj){ oNew[i] = obj[i]; if(typeof(oNew[i

JS中各种跳转解析

原文:https://www.cnblogs.com/wmcoder/p/5688988.html Javascript中的location.href有很多种用法,主要如下: 当前页面打开URL地址: ①self.location.href="/url"  ②location.href="/url" ③windows.location.href="/url"  ④this.location.href="/url" 父级页面打开

JS中parseint和number的区别

两者定义的区别 parseInt将字符串(String)类型转为整数类型.Number() 函数把对象(Object)的值转换为数字. parseInt得到的结果是整数或者NaN,而Number得到的是数字(整数,小数等)或者NaN: parseInt()语法 parseInt(string, radix) 参数   描述 string 必需.要被解析的字符串. radix 可选.表示要解析的数字的基数.该值介于 2 ~ 36 之间. 如果省略该参数或其值为 0,则数字将以 10 为基础来解析.