Javascript Number类型常见迷惑点
1:NaN(Not a Number)
表示一个本来要返回数值的操作数没有返回数值的情况。在ECMAscript中,任何数除以0会返回NaN【ps:实际上只有0/0会返回NaN】,正(负)数除以0会返回Infinity(-infinity)。
NaN本身有两个非同寻常的特点,1、任何涉及NaN的操作(如:NaN/10)都会返回NaN,2、NaN与任何值都不想等包括NaN本身。
console.log(NaN == NaN);
console.log(NaN === NaN);
#results
//false
//false
2、isNaN()函数
ECMAScript定义了isNaN()函数,函数接受一个参数,该参数可以是任何类型,用于判断传入的参数是否是“不是数值“。
console.log(isNaN(NaN));
console.log(isNaN("10"));
console.log(isNaN(20));
console.log(isNaN("blue"));
console.log(isNaN(true));
#results
//true
//false
//false
//true
//false
3、数值转换
有3个函数可以将不是非数值转换为数值:Number()、parseInt()、parseFloat()。
Number():
转型函数Number()可以用于任何数据类型。
Number()函数转换规则:
a.如果是数字值,就简单转入和返回;
b.如果是Boolean类型,true和false分别返回1和0;
c.如果是null值,返回0;
d.如果是undefined,返回NaN;
e.如果是字符串,遵循下列规则:
如果字符串只包含数字,则直接转换成十进制数值。(如果数字前有0会被忽略,如”0123“转换成123)。
如果字符串中包含有效的浮点数形式,将其转换成对应的浮点数值(前导0依然会被忽略)。
如果字符串中包含有效的十六进制格式,将其转换为相同大小的十进制整数值。
如果字符串为空(即不包含任何字符),则转换成0。
如果字符串是包含除上述格式以外的其他格式,则转换为NaN。
console.log(Number("0x10"));
console.log(Number("10abc"));
console.log(Number(" "));
#results
//
//NaN
//
f.如果是对象,先调用对象的valueOf()方法,然后按照前面的规则返回,如果返回结果为NaN,则再调用对象的toString()方法,再按照前面的规则转换返回的字符串值。
另外两个函数则专门用于把字符串转换成数值,这3个函数对于同样的输入可能会有不同的返回结果。
parseInt():
parseInt()函数在转换字符串是,更多的是看其是否符合数字模式。它会忽略字符串前面的空白字符,直到找到第一个非空白字符;如果第一个字符不是数字或者负号,parseInt()会返回NaN,也就是说parseInt()转换空白字符会返回NaN(与Number()不同),parseFloat()也返回NaN。如果第一个是数字字符,parseInt()会继续解析直到最后一个字符或者遇到了一个非字符。
console.log(parseInt("10abc"));
console.log(parseInt(" "));
console.log(parseInt("0xA"));
#results
//
//NaN
//
注意:ECMAScript 5 JavaScript引擎中,parseInt()不具备解析八进制的能力,parseInt('070')输出70!如果需要让parseInt()函数将传入的字符串转换为指定进制的数,可以为其传入第二个参数:转换时使用的技术(即多少进制)。不指定基数意味着让parseInt()自己决定如何让解析字符串,所以为了避免错误的解析,建议无论什么情况下都明确指定基数。
console.log(parseInt("AF",16));
console.log(parseInt("10",10));
console.log(parseInt("10",10));
#results
//
//
//
parseFloat()函数与parseInt()函数类似,从第一个字符开始解析,一直到字符串末尾或者直到遇见第一个无效的浮点数字字符为止,解析时第一个小数点有效,第二个小数点无效。parseFloat()函数与parseInt()函数除小数点的区别外,第二个区别在于它始终会忽略前导的0,也就是说parseFloat()在解析十六进制数时会返回0.
console.log(parseFloat("22.23.2"));
console.log(parseFloat("0x10"));
#results
// 22.23
//
Javascript Number类型常见迷惑点的更多相关文章
- Javascript中类型: undefined, number ,string ,object ,boolean
var a1; var a2 = true;var a3 = 1;var a4 = "Hello";var a5 = new Object();var a6 = null;var ...
- javascript学习笔记2-typeof、Number类型、Boolean()
1.typeof操作符 对一个值使用typeof操作符可能返回下列某个字符串 "undefined"——这个值未定义 "boolean"——这个值是布尔值 &q ...
- Javascript数据类型——number类型
ECMAScript规范中使用IEEE754格式来表示整数和浮点数.支持十进制.八进制以及十六进制.有一点注意的是八进制数字在严格模式下是无效的,这可能会影响到程序的正常运行. 避免浮 ...
- JavaScript 数值Number类型详解
Number 问题 如果下面的问题你都能回答对了吗? 0.1 + 0.2 == 0.3 成立吗? .e-5 表示多少? 怎么表示8进制? 怎么转换进制? 如何将字符串转换成数值或整数?反过来呢?十六进 ...
- 使用 JavaScript 中的变量、数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算符的不同位置得到不同的结果
查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的变量.数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算 ...
- js中Boolean类型和Number类型的一些常见方法
Boolean类型 Boolean类型重写了valueOf() 方法, 返回基本布尔类型值true或false,重写了toString() 方法,返回基本字符串"true" 和 & ...
- 《JavaScript高级程序设计》读书笔记(三)基本概念第二小节 Number类型
内容---语法 上一小节---数据类型 本小节 number类型---流程控制语句---理解函数 number类型--使用IEEE754格式来表示整数和浮点数值(双精度数值)--规定了数值字面量格式, ...
- javascript 操作符类型隐性转换
javascript 操作符类型隐性转换 (一).一元操作符只能操作一个值的操作符叫做一元操作符1.递增和递减操作符a. 在应用于一个包含有效数字字符的字符串时,先将其转换为数字值,再执行加减1的操作 ...
- (Frontend Newbie)JavaScript基础之常见数据类型
JavaScript中的数据类型分为两种,一种是简单数据类型,包括Undefined.Null.Boolean.Number和String,另一种是复杂数据类型,即Object,也可称作为引用类型. ...
随机推荐
- 查看被锁的数据[Z]
SELECT LOCK_INFO.OWNER || '.' || LOCK_INFO.OBJ_NAME AS OBJ_NAME --对象名称(已经被锁住) ,LOCK_INFO.SUBOBJ_NAME ...
- OC——NSDictionary和NSMutableDictionary
//初始化 NSString *key1 = @"key1"; NSString *key2 = @"key2"; NSString *key3 = @&quo ...
- (原+转)ROC曲线
转自:http://baike.baidu.com/link?url=_H9luL0R0BSz8Lz7aY1Q_hew3JF1w-Zj_a51ggHFB_VYQljACH01pSU_VJtSGrGJO ...
- mac git 命令提示
直接进入正题: $ brew list 查看你是否已经安装了"bash-completion",如果没有,继续往下看: $ brew install bash-completion ...
- hdu 2966 In case of failure k-d树
题目链接 给n个点, 求出每个点到离它最近的点的距离. 直接建k-d树然后查询就可以 感觉十分神奇... 明白了算法原理但是感觉代码还不是很懂... #include <bits/stdc++ ...
- 整体刷新和局部刷新frameset窗口(转)
在项目中,经常会遇到页面分割,最常见的系统或网站的主界面.主页面分为,上面系统简介.下面作者简介.左边系统功能菜单.右边则是菜单真正展示的界面. 遇到这种这种分割页面,大家 ...
- html5 新增语义标签
一份模板: <body> <header> <hgroup> <h1>Page title</h1> <h2>Page subt ...
- perl /m 当作多行处理
高级用法 多行匹配: zjtest7-frontend:/root/0825# cat a2.pl print "1111111111111\n"; my $_="abc ...
- python爬爬爬之单网页html页面爬取
python爬爬爬之单网页html页面爬取 作者:vpoet mail:vpoet_sir@163.com 注:随意copy 不用告诉我 #coding:utf-8 import urllib2 Re ...
- 数据结构--队列之C数组实现
队列是一种限定操作的线性表,它只能在表的一段插入,另外一段取出.所以也称为先进先出数据结构(FIFO---First In First Out) C代码如下: #include<stdio.h& ...