JavaScript中数值
Posted 简单的小伙子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript中数值相关的知识,希望对你有一定的参考价值。
javascript中数值:
JavaScript 语言的底层根本没有整数,所有数字都是小数(64位浮点数)。容易造成混淆的是,某些运算只有整数才能完成,此时 JavaScript 会自动把64位浮点数,转成32位整数,然后再进行运算,参见《运算符》一章的“位运算”部分。
由于浮点数不是精确的值,所以涉及小数的比较和运算要特别小心。
0.1 + 0.2 === 0.3
// false
0.3 / 0.1
// 2.9999999999999996
1 === 1.0 // true
(0.3 - 0.2) === (0.2 - 0.1)
// false
/
Math.pow(2, 53)
// 9007199254740992
Math.pow(2, 53) + 1
// 9007199254740992
Math.pow(2, 53) + 2
// 9007199254740994
Math.pow(2, 53) + 3
// 9007199254740996
Math.pow(2, 53) + 4
// 9007199254740996
大于2的53次方以后,整数运算的结果开始出现错误。所以,大于2的53次方的数值,都无法保持精度。由于2的53次方是一个16位的十进制数值,所以简单的法则就是,JavaScript 对15位的十进制数都可以精确处理。
javaScript中,数值可以使用科学计数法的表示方法,
123e3 // 123000
123e-3 // 0.123
-3.1E+12
.1e-23
3、数值的进制:
- 十进制:没有前导0的数值。
- 八进制:有前缀
0o
或0O
的数值,或者有前导0、且只用到0-7的八个阿拉伯数字的数值。 - 十六进制:有前缀
0x
或0X
的数值。 - 二进制:有前缀
0b
或0B
的数值。
特殊值:
正零和负零:
javascript内部实际上存在2个0
:一个是+0
,一个是-0
,区别就是64位浮点数表示法的符号位不同。它们是等价的。
-0 === +0 // true
0 === -0 // true
0 === +0 // true
//几乎所有场合,正零和负零都会被当作正常的0。
+0 // 0
-0 // 0
(-0).toString() // '0'
(+0).toString() // '0'
//唯一有区别的场合是,+0或-0当作分母,返回的值是不相等的。
(1 / +0) === (1 / -0) // false
//上面的代码之所以出现这样结果,是因为除以正零得到+Infinity,除以负零得到-Infinity,这两者是不相等的
NaN
1、(含义) 是JavaScript中的特殊值,表示“非数值”(Not a Number),主要出现在将字符串解析成数字出错的场合。
5 - 'x' // NaN
// 一些数学函数的运算结果会出现NaN
Math.acos(2) // NaN
Math.log(-1) // NaN
Math.sqrt(-1) // NaN
//0除以0也会得到NaN。
0 / 0 // NaN
//需要注意的是,NaN不是独立的数据类型,而是一个特殊数值,它的数据类型依然属于Number,使用typeof运算符可以看得很清楚
typeof NaN // 'number'
2、运算规则
NaN不等于任何值,包括它的本身。数组的indexOf
方法内部使用的是严格相等运算符,所以该方法对NaN
不成立。NaN
在布尔运算时被当作false
。NaN
与任何数(包括它自己)的运算,得到的都是NaN
。
NaN === NaN // false
[NaN].indexOf(NaN) // -1
Boolean(NaN) // false 可以根据对象进行输出,好像是直接强制转换类型的意思,直接是在数据类型中可以进行输出。转换数据类型。
NaN + 32 // NaN
NaN - 32 // NaN
NaN * 32 // NaN
NaN / 32 // NaN
Infinity
1、含义,表示“无穷”用来表示两种场景。一种是一个正的数值太大,或一个负的数值太小,无法表示;另一种是非0数值除以0,得到Infinity
。Infinity
有正负之分,Infinity
表示正的无穷,-Infinity
表示负的无穷
Infinity === -Infinity // false
1 / -0 // -Infinity
-1 / -0 // Infinity
Infinity
大于一切数值(除了NaN
),-Infinity
小于一切数值(除了NaN
)
Infinity
与NaN
比较,总是返回false
。
运算规则
Infinity
的四则运算,符合无穷的数学计算规则。
5 / Infinity // 0
0 * Infinity // NaN
0 / Infinity // 0
Infinity / 0 // Infinity
Infinity
加上或乘以Infinity
,返回的还是Infinity
。
Infinity`减去或除以`Infinity`,得到`NaN
Infinity`与`undefined`计算,返回的都是`NaN
与数值相关的全局方法:
parselnt()
(1),基本用法,用于将字符串转为整数。
parseInt('123') // 123
//如果字符串头部有空格,空格会被自动去除。
parseInt(' 81') // 81
//如果parseInt的参数不是字符串,则会先转为字符串再转换。
parseInt(1.23) // 1
// 等同于
parseInt('1.23') // 1
//字符串转为整数的时候,是一个个字符依次转换,如果遇到不能转为数字的字符,就不再进行下去,返回已经转好的部分。
parseInt('8a') // 8
parseInt('12**') // 12
parseInt('12.34') // 12
parseInt('15e2') // 15
parseInt('15px') // 15
// 上面代码中,parseInt的参数都是字符串,结果只返回字符串头部可以转为数字的部分。
//如果字符串的第一个字符不能转化为数字(后面跟着数字的正负号除外),返回NaN。
parseInt('abc') // NaN
parseInt('.3') // NaN
parseInt('') // NaN
parseInt('+') // NaN
parseInt('+1') // 1
parseInt
方法还可以接受第二个参数(2到36之间),表示被解析的值的进制,返回该值对应的十进制数。默认情况下,parseInt
的第二个参数为10,即默认是十进制转十进制
parseInt('1000', 2) // 8
parseInt('1000', 6) // 216
parseInt('1000', 8) // 512
上面代码中,二进制、六进制、八进制的1000
,分别等于十进制的8、216和512。这意味着,可以用parseInt
方法进行进制的转换。,
parseFloat() 方法用于将一个字符串转为浮点数
isNaN() 方法可以用来判断一个值是否为NaN
isNaN(NaN) // true
isNaN(123) // false
isFinite() 方法返回一个布尔值,表示某个值是否为正常的数值
isFinite(Infinity) // false
isFinite(-Infinity) // false
isFinite(NaN) // false
isFinite(undefined) // false
isFinite(null) // true
isFinite(-1) // true
以上是关于JavaScript中数值的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段12——JavaScript的Promise对象