JavaScript基本类型值-Number类型


Posted in Javascript onFebruary 24, 2017

大致介绍

在JavaScript的内部采用IEEE754格式来表示数字,所以不区分整数和浮点数,都是用64位浮点数的形式储存。就是说,在JavaScript内部,就根本没有小数。但是有些运算必须得需要整数完成,所以JavaScript有时会把64位的浮点数转换成32位的整数,再进行运算。

整数

JavaScript对整数提供四种表示方法:

1、二进制:有前缀0b的数值,出现0,1以外的数字会报错

2、八进制:有前缀0o的数值,或者是以0后面再跟一个数字(0-7)。如果超出了前面所述的数值范围,则会忽略第一个数字0,视为十进制数

注意:八进制字面量在严格模式下是无效的,会导致支持该模式的JavaScript引擎抛出错误

3、十六进制:有前缀0x,后跟任何十六进制数字(0~9及A~F),字母大小写都可以,超出范围会报错

4、十进制

var num2 = 0b11;
 console.log(num2); //3
 var num2 = 0b12;
 console.log(num2); //报错
 var num8 = 0o76;
 console.log(num8); //02
 var num8 = 0o78;
 console.log(num8); //报错
 var num16 = 0x2a;
 console.log(num16); //42
 var num16 = 0x2h;
 console.log(num16) //报错

浮点数

所谓浮点数,就是该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。与整数不同,浮点数只能用十进制来表示

浮点数的精度远远不如整数,所以设计浮点数的运算好比较要小心

例如:

console.log(0.1 + 0.2 == 0.3); //false 0.30000000000000004
 console.log(0.6/0.2); //2.9999999999999996

科学计数法

对于那些极大极小的数值,可以用e表示法(即科学计数法)表示的浮点数值表示。用e表示法表示的数值等于e前面的数值乘以10的指数次幂

以下两种情况,JavaScript会自动将数值转为科学计数法表示,其他情况都采用字面形式直接表示。

1、小数点前的数字多余21位

console.log(1234567890123456789012);// 1.2345678901234568e+21
 console.log(123456789012365648787); //123456789012365660000 

2、小数点后面的0多余5位

console.log(0.0000006);//6e-7
 console.log(0.000006); //0.000006

数值范围

由于内存的限制,ECMAScript并不能保存世界上所有的数值,所以就有了最大值和最小值

最小值保存在Number.MIN_VALUE中,这个值是5e-324

最大值保存在Number.MAX_VALUE,这个值是1.7976931348623157e+308

console.log(Number.MIN_VALUE) //5e-324
 console.log(Number.MAX_VALUE); //1.7976931348623157e+308

如果数字超过最大值,javascript会返回Infinity,这称为正向溢出(overflow);如果等于或超过最小负值-1023(即非常接近0),javascript会直接把这个数转为0,这称为负向溢出(underflow)

如果要想确定一个数值是不是有穷的,可以使用isFinite()函数。这个函数在参数位于最小与最大数值之间时会返回true

var result = Number.MAX_VALUE + Number.MAX_VALUE;
 console.log(isFinite(result)); //false

特殊数值

1、+0和-0

这两个0在大对数的情况下都是等价的

-0 === +0; //true
 0 === -0; //true
 0 === +0; //true

但是在作为分母的时候是不一样的

1/-0 == 1/+0; //false

2、infinity

Infinity表示“无穷”,用来表示两种场景。一种是一个正的数值太大,或一个负的数值太小,无法表示;另一种是非0数值除以0,得到Infinity。

Math.pow(2,Math.pow(2,100));//Infinity
 1/0;//Infinity

Infinity参与的运算结果只能是其本身、0或NaN

* Infinity;//Infinity
- Infinity;//-Infinity
+ Infinity;//Infinity
/ Infinity;//0
 Infinity / 2;//Infinity
 Infinity * Infinity;//Infinity
 Infinity - Infinity;//NaN
 Infinity + Infinity;//Infinity
 Infinity / Infinity;//NaN

3、NaN

这个数值表示一个本来要返回数值的操作数未返回数值的情况

NaN与任何值不相等,包括它本身,并且涉及NaN的任何操作都会返回NaN

5 - 'x'; //NaN
 Math.acos(2); //NaN
 0 / 0; //NaN
 NaN == NaN;//false
 NaN == Infinity;//false

NaN不是一种独立的数据类型,而是一种特殊数值,它的数据类型依然属于Number

 typeof NaN; //number

isNaN方法可以用来判断一个值是否为NaN,但是,isNaN只对数值有效,如果传入其他值,会被先转成数值。比如,传入字符串的时候,字符串会被先转成NaN,所以最后返回true,这一点要特别引起注意。也就是说,isNaN为true的值,有可能不是NaN,而是一个字符串。

isNaN('Hello') // true
 // 相当于
 isNaN(Number('Hello')) // true

判断NaN更可靠的方法是,利用NaN是javascript之中唯一不等于自身的值这个特点,进行判断

function isNaN(value){
 return value != value;
 }

数制转换

有3个函数可以把非数值转换成数值:Number()、parseInt()和parseFloat()。其中Number()可以将任意类型的值转化成数值,而parseInt()和parseFloat()只应用于字符串向数字的转换

Number()

转换规则:

1、如果是Boolean值,true和false将分别转换为1和0

2、如果是null值,返回0

3、如果是undefined,返回NaN

4、如果是字符串,遵循以下规则:

(1)若字符串只包含十进制或十六进制数字,则转成十进制的数字

注意:Number()不识别八进制数字的字符串,会按照十进制数字处理

字符串'1.2.'不会报错,但数字1.2.会报错

(2)若字符串为空字符串或空格字符串,则转成0

(3)其他情况的字符串,则转成NaN

Number(true) //1
 Number(null) //0
 Number(undefined) //NaN
 Number("0123") //123
 Number("0x123") //291
 Number("0.2") //0.2
 Number("") //0
 Number("asd") //NaN

parseInt()

parseInt()专门用于把字符串转换成整数。在转换字符串时,会忽略字符串前面的空格,直到找到第一个非空格字符。如果第一个字符不是数字字符或者负号,parseInt()就会返回NaN。如果是,则继续解析,直到解析完成或者遇到非数字字符

console.log(parseInt(' 123.8px'));//123
 console.log(parseInt(' 123.8 '));//123
 console.log(parseInt(' -123.8px'));//-123
 console.log(parseInt('a123.8px'));//NaN
 console.log(parseInt('0 123.8px'));//0

注意:在ECMAScript5中,parseInt()已经不具备解析八进制的能力。例如八进制“070”,会忽略前面的“0”,得到十进制的70

为了消除在使用parseInt()函数时可能导致的上述困惑,可以为这个函数提供第二个参数:转换时使用的基数(多少进制)

parseInt("070") //70
 parseInt("070",8) //56

parseFloat()

parseFloat()专门用于字符串转换浮点数。同样地,解析时会忽略字符串前面的空格,直到找到第一个非空格字符,然后一直解析到字符串末尾或一个无效的浮点数字字符为止

console.log(parseFloat(' 0123.px'));//123
 console.log(parseFloat(' 123.px'));//123
 console.log(parseFloat(' 123.1px'));//123.1
 console.log(parseFloat(' 123.1.2px '));//123.1
 console.log(parseFloat(' -123.0px'));//-123
 console.log(parseFloat('.123.1px'));//0.123
 console.log(parseFloat('0 123px'));//0

注意:parseFloat()只解析十进制,所以十六进制的字符串始终会被转换成0。因此也没有第二个参数用来指定基数

 parseFloat("0xA") //0

注意:Number('')的结果是0,parseInt('')和parseFloat('')的结果是NaN

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
出现“不能执行已释放的Script代码”错误的原因及解决办法
Aug 29 Javascript
js对列表中第一个值处理与jsp页面对列表中第一个值处理的区别详解
Nov 05 Javascript
跟我学习javascript的定时器
Nov 19 Javascript
通用javascript代码判断版本号是否在版本范围之间
Nov 29 Javascript
将鼠标焦点定位到文本框最后(代码分享)
Jan 11 Javascript
判断颜色是否合法的正则表达式(详解)
May 03 Javascript
iview给radio按钮组件加点击事件的实例
Sep 30 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
Feb 08 Javascript
Node.js 进程平滑离场剖析小结
Jan 24 Javascript
微信小程序与公众号卡券/会员打通的问题
Jul 25 Javascript
js实现上下左右键盘控制div移动
Jan 16 Javascript
Vuex的各个模块封装的实现
Jun 05 Javascript
AngularJS Toaster使用详解
Feb 24 #Javascript
js获取隐藏元素的宽高
Feb 24 #Javascript
js css自定义分页效果
Feb 24 #Javascript
jQuery快速高效制作网页交互特效
Feb 24 #Javascript
Angular.js自定义指令学习笔记实例
Feb 24 #Javascript
利用原生JS与jQuery实现数字线性变化的动画
Feb 24 #Javascript
JavaScript和jQuery制作光棒效果
Feb 24 #Javascript
You might like
PHP中new static() 和 new self() 的区别介绍
2015/01/09 PHP
JScript内置对象Array中元素的删除方法
2007/03/08 Javascript
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
2008/09/27 Javascript
js判断选择时间不能小于当前时间的示例代码
2013/09/24 Javascript
JS 实现点击a标签的时候让其背景更换
2013/10/15 Javascript
jQuery根据用户电脑是mac还是pc加载对应样式的方法
2015/06/26 Javascript
js使用cookie记录用户名的方法
2015/11/26 Javascript
JS表单验证的代码(常用)
2016/04/08 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
2016/08/12 Javascript
原生JS中slice()方法和splice()区别
2017/03/06 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
2017/06/01 Javascript
妙用缓存调用链实现JS方法的重载
2018/04/30 Javascript
js根据json数据中的某一个属性来给数据分组的方法
2018/10/08 Javascript
webpack配置proxyTable时pathRewrite无效的解决方法
2018/12/13 Javascript
深入剖析JavaScript instanceof 运算符
2019/06/14 Javascript
layui在form表单页面通过Validform加入简单验证的方法
2019/09/06 Javascript
vue 验证码界面实现点击后标灰并设置div按钮不可点击状态
2019/10/28 Javascript
原生JavaScript实现进度条
2021/02/19 Javascript
Python牛刀小试密码爆破
2011/02/03 Python
使用pygame模块编写贪吃蛇的实例讲解
2018/02/05 Python
在python里协程使用同步锁Lock的实例
2019/02/19 Python
python 监测内存和cpu的使用率实例
2019/11/28 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
spyder 在控制台(console)执行python文件,debug python程序方式
2020/04/20 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
用python实现学生管理系统
2020/07/24 Python
css3实现背景图片拉伸效果像桌面壁纸一样
2013/08/19 HTML / CSS
吃透移动端 1px的具体用法
2019/12/16 HTML / CSS
伦敦的高级牛仔布专家:Trilogy
2018/08/06 全球购物
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
领导视察欢迎词
2014/01/15 职场文书
会计电算化毕业生自荐信
2014/03/03 职场文书
公司董事长助理工作职责
2014/07/12 职场文书
教师暑期培训感言
2014/08/15 职场文书
赵氏孤儿观后感
2015/06/09 职场文书
初中军训感言
2015/08/01 职场文书