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 相关文章推荐
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
May 25 Javascript
Jquery判断IE6等浏览器的代码
Apr 05 Javascript
javascript读取xml实现javascript分页
Dec 13 Javascript
Javascript中数组sort和reverse用法分析
Dec 30 Javascript
jquery图片轮播特效代码分享
Apr 20 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
Jan 06 Javascript
JavaScript代码实现图片循环滚动效果
Mar 19 Javascript
Javascript this 函数深入详解
Dec 13 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
Feb 05 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
Jun 19 Javascript
Vue仿支付宝支付功能
May 25 Javascript
vue系列之requireJs中引入vue-router的方法
Jul 18 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
用ODBC的分页显示
2006/10/09 PHP
PHP开发中四种查询返回结果分析
2011/01/02 PHP
PHP中使用crypt()实现用户身份验证的代码
2012/09/05 PHP
浅谈thinkphp的实例化模型
2015/01/04 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
实例分析PHP将字符串转换成数字的方法
2019/01/27 PHP
Knockout visible绑定使用方法
2013/11/15 Javascript
原生JavaScript生成GUID的实现示例
2014/09/05 Javascript
js实现简洁的滑动门菜单(选项卡)效果代码
2015/09/04 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
2015/12/04 Javascript
javascript中this关键字详解
2016/12/12 Javascript
JavaScript正则表达式函数总结(常用)
2018/02/22 Javascript
Vue实现动态添加或者删除对象和对象数组的操作方法
2018/09/21 Javascript
Vue实现图书管理小案例
2020/12/03 Vue.js
Python使用shelve模块实现简单数据存储的方法
2015/05/20 Python
Djang中静态文件配置方法
2015/07/30 Python
Python设计实现的计算器功能完整实例
2017/08/18 Python
名片管理系统python版
2018/01/11 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
2018/04/28 Python
详解Django之admin组件的使用和源码剖析
2018/05/04 Python
Python提取PDF内容的方法(文本、图像、线条等)
2019/09/25 Python
Django实现auth模块下的登录注册与注销功能
2019/10/10 Python
pytorch中的卷积和池化计算方式详解
2020/01/03 Python
python不到50行代码完成了多张excel合并的实现示例
2020/05/28 Python
HTML5操作WebSQL数据库的实例代码
2017/08/26 HTML / CSS
购买限量版收藏品、珠宝和礼品:Bradford Exchange
2016/09/23 全球购物
iKRIX意大利网上商店:男女豪华服装和配件
2019/10/09 全球购物
企业治理工作自我评价
2013/09/26 职场文书
团日活动总结范文
2014/04/25 职场文书
群众路线组织生活会发言材料
2014/10/17 职场文书
2015年办公室个人工作总结
2015/04/20 职场文书
绿色环保倡议书
2015/04/28 职场文书
如何撰写创业策划书
2019/06/27 职场文书
python3+PyQt5+Qt Designer实现界面可视化
2021/06/10 Python
Python3接口性能测试实例代码
2021/06/20 Python