【摘】http://javascript.ruanyifeng.com/
JavaScript 语言的底层根本没有整数,所有数字都是小数(64位浮点数)
1.0===1//true
0.1 + 0.2 === 0.3// false
0.3 / 0.1// 2.9999999999999996
(0.3 - 0.2) === (0.2 - 0.1)// false
十进制:没有前导0的数值
八进制:有前缀0o或0O的数值
十六进制:有前缀0x或0X的数值
二进制:有前缀0b或0B的数值
有前导0的数值会被视为八进制,但是如果前导0后面有数字8和9,则该数值被视为十进制。
特殊数值
1、正零和负零
JavaScript 内部实际上存在2个0:一个是+0,一个是-0
-0 === +0 // true
0 === -0 // true
0 === +0 // true
+0 // 0
-0 // 0
(-0).toString() // '0'
(+0).toString() // '0'
(1 / +0) === (1 / -0) // false
2、NaN
//主要出现在将字符串解析成数字出错的场合
5 - 'x' // NaN
//一些数学函数的运算结果会出现NaN
Math.acos(2) // NaN
Math.log(-1) // NaN
Math.sqrt(-1) // NaN
//0除以0也会得到NaN
0/0 //NaN
//它的数据类型依然属于Number
typeof NaN // 'number'
//NaN不等于任何值,包括它本身
NaN === NaN // false
3、Infinity
Infinity表示“无穷”,用来表示两种场景。
一种是一个正的数值太大,或一个负的数值太小,无法表示;
另一种是非0数值除以0,得到Infinity;
Infinity === -Infinity // false
1 / -0 // -Infinity
-1 / -0 // Infinity
//Infinity大于一切数值(除了NaN),-Infinity小于一切数值(除了NaN)。
//Infinity与NaN比较,总是返回false。
parseInt()
1、将字符串转为整数,如果参数不是字符串也会先转为字符串再转化;
2、字符串转为整数的时候,是一个个字符依次转换,如果遇到不能转为数字的字符,就不再进行下去,返回已经转好的部分;
3、parseInt的返回值只有两种可能,要么是一个整数,要么是NaN
parseFloat()
1、将一个字符串转为浮点数,如果参数不是字符串也会先转为字符串再转化;
2、如果字符串符合科学计数法,则会进行相应的转换;
3、如果字符串包含不能转为浮点数的字符,则不再进行往后转换,返回已经转好的部分;
4、如果参数不是字符串,或者字符串的第一个字符不能转化为浮点数,则返回NaN;
5、parseFloat的转换结果不同于Number函数
parseFloat(true) // NaN
Number(true) // 1
parseFloat(null) // NaN
Number(null) // 0
parseFloat('') // NaN
Number('') // 0
parseFloat('123.45#') // 123.45
Number('123.45#') // NaN
isNaN()
1、方法可以用来判断一个值是否为NaN;
2、isNaN只对数值有效,如果传入其他值,会被先转成(Number)数值。
3、字符串、对象、数组,除了一下情况,isNaN返回true
Number(true)//1
Number(false)//2
Number('')//0
Number([])//0
Number([123])//123
Number(['123'])//123
Number(null)//0
Number(undefined)//NaN
Number({})//NaN
4、判断NaN更可靠的方法是,利用NaN为唯一不等于自身的值的这个特点
function myIsNaN(value) {
return value !== value;
}
isFinite()
1、表示某个值是否为正常的数值
2、除了Infinity、-Infinity、NaN和undefined这几个值会返回false,isFinite对于其他的数值都会返回true