JavaScript 之 parseInt
首先还是从很热门的实例parseInt("09")==0说起。
parseInt(numString, [radix])这个函数后面如果不跟第2个参数来表示进制的话,默认是10进制。
比如说parseInt("010",10)就是10进制的结果:10,parseInt("010",2)就是2进制的结果:2,parseInt("010",8)就是8进制的结果:8,parseInt("010",16)就是16进制的结果:16。
下面我来说说没有指定进制单位的时候,默认是10进制,但:如果是里面的numString是0开头的就认为是8进制的,如果是0x开头的就认为是16进制的。
parseInt("10")==>parseInt("010",10)===>10
parseInt("010")==>parseInt("010",8)==>8
parseInt("0x10")==>parseInt("010",16)==>16.
许多事情不是想的那么顺利,比如说如果numString不是我们给的正常数字又怎么解释呢。查了些资料,是这样说的:
parseInt(numString)如果中间的numString遇到不是数字(0-9)的就中断往下解析,就只取不是数字之前的值去运算:
parseInt("100x"),就相当于parseInt("100") → parseInt("100",10) → 100,
parseInt("0100x"),就相当于parseInt("0100") → parseInt("100",8) → 64.
到这里我们似乎无视了一个就是16进制中的有个x,它也不是数字,是不是遇到x也无视了呢。尝试下了发现在这个特殊处理了下,比如
parseInt("0x10"),相当于parseInt("10",16) → 16和最上面的结果相符,但却和我刚说的,不是字符就自动不解析就应该理解成parseInt("0")相违背。
这里就需要注意下,parseInt里面的numString是这样的,当如果第一个不是0且不是字符就认为是10进制,一切照旧执行,遇到字母就停下来。又当如果是第一个是0,后面那个就需要注意了,如果是x就继续往下走,这里的x不代表数值,只能和前面的0一起组成0x代表16进制的单位,后面的才按上面我们讲的遇到非数字停止解析的规则来。比如parseInt("0xt")==>parseInt("0x")==>parseInt("",16)就是NaN了。
总结,parseInt(numString)里面的值:
(1)如果是第一位不是0就遇到字母就停止解析,并把字母前面的值作为10进制去解析,如果第一个就是字母那么值就是空,空成了NaN,比如:
parseInt("a")==>parseInt("",10)==>NaN.
parseInt("10a")==>parseInt("10")==>parseInt("10",10)==>10;
(2)如果第一位是0,且第2位不是x也和上面一样遇到字母就停止解析,并把字母前面的值作为8进制去解析,比如:
parseInt("0a")==>parseInt("0")==>parseInt("0",10)==>0.
PS:这个有点特殊,因为0a被解析成了0,还不具备看做是8进制的结构,下面那个就明显了。
parseInt("010a")==>parseInt("010")==>parseInt("10",8)==>8;
(3)如果第一位是0,且第2位是x那后面也和上面一样遇到字母就停止解析,并把字母前面的值作为16进制去解析,比如:
parseInt("0xt")==>parseInt("",16)==>NaN.
parseInt("0x12t")==>parseInt("12",16)==>18.
JavaScript 之 parseInt的更多相关文章
- javascript使用parseInt函数时需要注意的一些问题
这个问题大家可能会忽视,我在项目中就遇到了.写了提醒一下大家!!! 在用javascript的parseInt函数时,parseInt("08")或者parseInt(" ...
- JavaScript 的 parseInt 取整
http://www.neoease.com/javascript-get-integer-via-parseint/ JavaScript 是弱类型语言, 为了保证数值的有效性, 在处理数值的时候, ...
- javascript中parseint和number的区别
本来是不想写这个的,网上也有,问题是讲得很不清楚,或者说我阅读能力差吧. 首先,解释一下定义的区别: parseInt将字符串(String)类型转为整数类型.Number() 函数把对象(Objec ...
- JavaScript的parseint()函数
定义和用法 parseInt() 函数可解析一个字符串,并返回一个整数. 语法 parseInt(string, radix) 参数 描述 string 必选项.要转换为数字的字符串. radix 可 ...
- javascript中parseInt(),08,09,返回0
javascript中在使用parseInt(08).parseInt(09),进行整数转换的时候,返回值是0 工具/原料 浏览器 文本编辑器 方法/步骤 javascript中在使用pa ...
- javascript 中parseInt 的用法
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8 ...
- JavaScript 问题解决 -- parseInt("08")或parseInt("09")转换返回0的解决方法
不小心范了一个低级错误,这个问题也是很多初学者容易忽略滴,它就是js中的整数转换函数parseInt(string, radix). 使用parseInt转换"01" - &q ...
- JavaScript之parseInt()数值转换常被忽略的问题
使用parseInt()你可以从字符串中获取数值,该方法接受另一个基数参数,这经常省略,但不应该.当字符串以”0″开头的时候就有可能会出问题,例如,部分时间进入表单域,在ECMAScript 3中,开 ...
- JavaScript map+parseInt 容易产生的误区
map /** * 语法: * var new_array = arr.map(function callback(currentValue[,index[,array]]){ * // return ...
随机推荐
- Codeforces Round #356 (Div. 2) B. Bear and Finding Criminal 水题
B. Bear and Finding Criminals 题目连接: http://www.codeforces.com/contest/680/problem/B Description Ther ...
- Codeforces Beta Round #97 (Div. 1) A. Replacement 水题
A. Replacement 题目连接: http://codeforces.com/contest/135/problem/A Description Little Petya very much ...
- vijos 1659 河蟹王国 线段树区间加、区间查询最大值
河蟹王国 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 https://vijos.org/p/1659 Description 河蟹王国有一位河蟹国王,他 ...
- 连接本地websocket服务延迟的问题
今天用C#编写了一个Chrome Remote Debugger的客户端程序,发现使用rest和websocket程序时第一次连接的时候特别慢,大概每次都要消耗一秒左右,而用chrome直接连接却没有 ...
- MFC小程序------01 代码管理器
1.代码入库: 2.代码查找: 3.查看全部代码: 4.程序设置: 自己学习MFC写的一个小程序,当中还有很多功能还待完好,比方数据库的导入功能还没有写,但导出功能是能够用的,查找算法也不是非常好,还 ...
- C#引用类型转换,到底使用is,as还是显式强转?
在C#中,当引用类型需要转换的时候,经常会用到关键字is.as以及显式强转.本篇来体验这三者的用法. 先来梳理.NET引用类型转换的"约定俗成",或者叫"惯例" ...
- WebSocket重连reconnecting-websocket.js的使用
原文:https://www.cnblogs.com/kennyliu/p/6477746.html 页面引用 <script src="~/Scripts/reconnectin ...
- C#编程(二)
C#中的变量 例如:int i;//声明一个int类型的变量,变量名是 i;在未为该变量进行赋值操作前,禁止使用该变量.使用(=)给变量赋值,在声明之后可以 i=10来赋值.也可以在声明一个变量的同时 ...
- Selenium2+python自动化29-js处理多窗口
前言 在打开页面上链接的时候,经常会弹出另外一个窗口(多窗口情况前面这篇有讲解:Selenium2+python自动化13-多窗口.句柄(handle)),这样在多个窗口之间来回切换比较复杂,那么有没 ...
- Unity3D脚本批量打包渠道包
最近在研究Unity3D脚本批量打包,比如在Android平台下各种不同分辨率和不同内存大小的机器,可能还有不同的渠道包,不同渠道可能用的SDK都不一样,这一切的一切都表明你的代码无法做到自适应的,除 ...