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中的Split使用方法与技巧
Mar 09 Javascript
js运动框架_包括图片的淡入淡出效果
May 11 Javascript
浅析jQuery EasyUI中的tree使用指南
Dec 18 Javascript
详解javascript的变量与标识符
Jan 04 Javascript
JavaScript 函数模式详解及示例
Sep 07 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
Jun 04 Javascript
jQuery表单设置值的方法
Jun 30 jQuery
Javascript防止图片拉伸的自适应处理方法
Dec 26 Javascript
JS实现json数组排序操作实例分析
Oct 28 Javascript
VuePress 中如何增加用户登录功能
Nov 29 Javascript
JavaScript中ES6规范中let和const的用法和区别
Aug 06 Javascript
js实现简易点击切换显示或隐藏
Nov 29 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和XSL stylesheets转换XML文档
2006/10/09 PHP
玩转虚拟域名◎+ .
2006/10/09 PHP
PHP使用DES进行加密与解密的方法详解
2013/06/06 PHP
编写PHP脚本过滤用户上传的图片
2015/07/03 PHP
PHP进阶学习之Geo的地图定位算法详解
2019/06/19 PHP
ie focus bug 解决方法
2009/09/03 Javascript
jquery.validate使用攻略 第一部
2010/07/01 Javascript
JS自动适应的图片弹窗实例
2013/06/29 Javascript
Jquery节点遍历next与nextAll方法使用示例
2014/07/22 Javascript
js仿苹果iwatch外观的计时器代码分享
2015/08/26 Javascript
jQuery简单实现上下,左右滑动的方法
2016/06/01 Javascript
使用javascript做在线算法编程
2018/05/25 Javascript
Angular通过指令动态添加组件问题
2018/07/09 Javascript
javascriptvoid(0)含义以及与"#"的区别讲解
2019/01/19 Javascript
vue中添加与删除关键字搜索功能
2019/10/12 Javascript
JS数组方法join()用法实例分析
2020/01/18 Javascript
Vue 防止短时间内连续点击后多次触发请求的操作
2020/11/11 Javascript
JavaScript使用setTimeout实现倒计时效果
2021/02/19 Javascript
[00:57]英雄,你的补给到了!
2020/11/13 DOTA
Python抓取百度查询结果的方法
2015/07/08 Python
Python的Django框架中的URL配置与松耦合
2015/07/15 Python
python实点云分割k-means(sklearn)详解
2020/05/28 Python
浅谈Selenium+Webdriver 常用的元素定位方式
2021/01/13 Python
Python字节单位转换(将字节转换为K M G T)
2021/03/02 Python
使用CSS3在触屏上为按钮实现激活效果
2013/09/27 HTML / CSS
HTML5中Localstorage的使用教程
2015/07/09 HTML / CSS
canvas如何绘制钟表的方法
2017/12/13 HTML / CSS
Mio Skincare法国官网:身体紧致及孕期身体护理
2018/04/04 全球购物
澳大利亚排名第一的在线酒类商店:MyBottleShop
2018/04/26 全球购物
Tessabit日本:集世界奢侈品和设计师品牌的意大利精品买手店
2020/01/07 全球购物
商得四方公司面试题(gid+)
2014/04/30 面试题
学校七一活动方案
2014/01/19 职场文书
超市创业计划书
2014/09/15 职场文书
简爱读书笔记
2015/06/26 职场文书
学术研讨会主持词
2015/07/04 职场文书
MySQL5.7并行复制原理及实现
2021/06/03 MySQL