上一篇文章记录了Undefined、Null、Boolean,这篇文章主要讲解Number类型。主要内容有:Number表示的数据、值的范围、什么是NaN以及数值转换的三种方式。
一、基础知识
Number
使用IEEE 754 格式表示整数和浮点数。
十进制整数
let initNum=55
八进制整数
前缀为
0
,然后是八进制数字0~7,如果字面量中包含的数值超出了有效范围,会忽略前缀0
,后面的数字会被当成十进制数。(在严格模式下无效)let octalnum=070 //八进制56
let octalnum=079 //无效八进制值,当成79十六进制整数
前缀
0x
,然后是十六进制数字0~9以及A~Flet hexnum=0xA //十六进制10
浮点数
数值中必须包含小数点,而且小数点后面必须至少有一个数字。
let floatnum=1.1
let floatnum=0.1
let floatnum=.1 //有效 但不推荐小数点后没有数字、数值本身就是整数的情况下,会被转化为整数:
let floatnum=1. //转为整数1
let floatnum=10.0 //转为整数10对非常大或者非常小的数,浮点值可用科学计算法表示,格式是在数值后加上
e + 几次幂
,如下:let floatnum=3.125e7 //等于31250000
由于舍入错误,很难测试特定的浮点值。如
0.1+0.2
实际上会等于0.30000000000000004
,所以不建议检测特定的浮点值。
二、值的范围
ECMAScript可以表示的最小值保存在Number.MIN_VALUE
中,最大值保存在Number.MAX_VALUE
中,如果某个值超过js可以表示的范围,那么该数字会自动转化为Infinity
或-Infinity
。
三、NaN
Number有一个特殊的数值叫NaN
,意思是Not a Number
,即不是数值。用于表示要返回数值的操作失败了,比如0除以任何数都会导致错误:
console.log(0/1) //NaN
console.log(0/0) //NaN
console.log(-0/+0) //NaN
如果分子非0,分母是0,则返回Infinity
或-Infinity
console.log(5/0) //Infinity
console.log(-5/0) //-Infinity
任何涉及NaN
的操作始终返回NaN
console.log(NaN/10) //NaN
NaN
不等于包含NaN
在内的任何值
console.log(NaN==NaN); //false
isNaN()
可以判断参数是否“不是数值”:
isNaN(NaN) //true 不是数值
isNaN(10) //false 是数值
//它会尝试把参数转为数值
isNaN("10") //false (被转化为了10,所以是数值)
isNaN(true) //false (被转化为了1,所以是)
//无法转换的则判定为“不是数值”
isNaN("blue") //true
四、数值转换
Number()
:将任何数据转为数值(转整数)Number(true) //1
Number(10) //10
Number(null) //0
Number(undefined) //NaN//为字符串时:
Number("") //0
Number("1") //1
Number("1.1") //1.1
Number("011") //11 为八进制时,则转为十进制值
Number("0xf") //15 为十六进制时,转为与该十六进制值对应的十进制整数
Number("hello") //NaN 若为上述外的其他字符,返回NaNparseInt()
:将字符串转为数值parseInt(1) //1
parseInt(1.1) //1为字符串时:
//如果第一个字符不是数值、加号或减号,则返回NaN
parseInt("") //NaN
parseInt("a") //NaN//如果第一个字符是数值、加号或减号,则依次往后检测,直到字符串末尾或碰到非数值字符
parseInt("1234b") //1234
parseInt("22.5") //22//可以识别八进制、十六进制
parseInt("0xA") //0
parseInt("0xAF",16) //175 后面的数表示进制数,防止混淆
parseInt("AF",16) //175
parseInt("AF") //NaN
parseInt("10",2) //2 按二进制
parseInt("10",8) //8 按八进制
parseInt("10",10) //10 按十进制
parseInt("10",16) //16 按十六进制parseFloat()
:将字符串转为数值(转小数)//忽略字符串开头的0
parseFloar("09") //9//解析到字符串末尾或者碰到非数值字符为止,其中第一个小数点有效
parseFloat("0.01") //0.01
parseFloat("0.01a") //0.01
parseFloat("0.01.11") //0.01
parseFloat("1234b") //1234//检测不了十六进制 始终返回0
parseFloat("0xA") //0