JavaScript Number类型详解:数值表示、转换与Math对象
本文详细解析JavaScript中Number类型的底层机制,涵盖IEEE 754标准下的整数与浮点数表示、八进制与十六进制的字面量规则。深入讲解Number、parseInt和parseFloat的转换逻辑,辨析NaN与Infinity的特殊行为,并系统梳理Math对象提供的数学方法与常量,帮助开发者准确处理数值计算与类型转换。
JavaScript数值表示基础
JavaScript采用IEEE 754格式来存储整数和浮点数值。对于浮点数值,定义中必须包含小数点,且小数点后至少需要有一位数字。在内存占用方面,浮点数所需的存储空间是整数的两倍。尽管浮点数最高能保留17位小数精度,但在实际进行算术运算时,其精度表现远不如整数。

数值字面量格式
JavaScript支持多种数值字面量格式,包括十进制、八进制以及十六进制。需要注意的是,在严格模式下使用八进制字面量是无效的。八进制字面量的书写规则是以数字0开头,后接0到7之间的数字序列。如果字面值中的数值超出了有效范围,前导的0将被忽略,剩余部分会被当作十进制数进行解析。
070//56
079//79
十六进制字面量的前两位必须是0x,随后跟随十六进制数字(0-9以及A-F)。其中的字母A到F既可以使用大写,也可以使用小写,系统均能正确识别。
0xA//10
当进行算术计算时,所有以八进制或十六进制表示的数值,最终都会被自动转换为十进制数值参与运算。
JavaScript规定了数值的取值范围,超出该范围的计算结果将产生特殊值。

数值范围与特殊值
如果某次计算中的结果中得到了一个超出javascript数值范围的值,那么这个值将被转换为特殊的Infinity值,该值无法参与下一次的计算,因为Infinity是无法参与计算的数值。如果这个数是正数则被转换为Infinity(正无穷),如果这个数是负数则被转换为-Infinity(负无穷)。
-10/0//-Infinity
10/0//Infinity

isInfinite()判断一个数是否有穷。
var result = Number.MAX_VALUE + Number.MAX_VALUE
console.log(isFinity(result));//false
NaN与Infinity处理
NaN
console.log(NaN === NaN)//false
0/0//NaN
isNaN:接收一个参数,会尝试将这个值转换为数值,返回布尔值
console.log(isNaN('10'));//false
console.log(isNaN('bb'));//true
数值转换函数详解
数值转换 有3个函数可以把非数值转换为数值 Number():使用于任何数值类型。
1.null
Number(null)//0
undefined
Number(undefined)//NaN
2.布尔值
Number(true)//1
Number(false)//0
3.字符串
Number('bb')//NaN,非数值字符
Number('123')//123,数值字符
Number('')//0,空串
4.对象 如果是对象,则调用对象的valueOf()方法,然后依照上述的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串值。 5.parseInt()/parseFloat():用于将字符串转换为数值。
parseInt():从第一个字符串开始解析,直到解析到非数字字符,可接受两个参数,第二个参数代表不同的进制,默认转换为十进制数。
parseInt('')//NaN,空串
parseInt(22.4)//22
parseInt('12bu')//12
parseInt('10',2)//2
parseInt('10',8)//8
parseFloat():从第一个字符串开始解析,第一个小数点有效,忽略前导0,只能转换为十进制数值。
parseFloat('')//NaN
parseFloat('090')//90
parseFloat('2.3.4')//2.3
Math对象与方法常量
总结
- 不区分整数值和浮点数, JavaScript中所有数字均用64位浮点数值标识(IEEE 754)。
- 就像java程序员所熟悉的double类型
- 取值范围在 ±1.7976931348623157 × 10 308 到 ±5 × 10 −324 之间
-
文字:
- 整数
- 十六进制 0x
- 八进制 0
- 浮点表示
- Math类
- 方法
- pow // 求幂
- round //四舍五入
- ceil //向上取整
- floor //向下取整
- abs //求绝对值
- max //最大值
- min //最最小值
- sqrt
- log
- exp
- acos
- asin
- atan
- atan2
- random
- sin
- cos
- 常量
- PI
- E
- LN2
- LN10
- LOG2E
- LOG10E
- PI
- SQRT1_2
- SQRT2
- 方法
- 无限值
- 正无穷
- Infinity //rw
- Number.POSITIVE_INFINITY // r
- 1/0
- Number.MAX_VALUE + 1
- 负无穷
- Number.NEGATIVE_INFINITY //rw
- -Intifinty //r
- -1/0
- -Number.MAX_VALUE - 1
- NaN
- 不与任何值相等 包括它自己.
- NaN //rw
- Number.NaN //r
- 0/0 //计算结果为NaN
- Zero
- Number.MIN_VALUE/2
- -Number.MIN_VALUE/2
- -1/Infinity
- -0
- 正无穷
-
Rounding-error
- 整数
var x = .3 - .2
var y = .2 - .1
x == y
x == .1 // => false .3 -.2 不等于 ./
y == .1 // => true .2 - .1 等于 .1
WebStorm内置JS代码格式化功能怎么用
2026-11-05 10:10:47
在线JS代码格式化与混淆压缩工具推荐及使用指南
2026-11-03 20:31:53
CodePen、JSFiddle与RunJS对比:哪款在线JavaScript编辑器更好用
2026-11-03 18:52:45
无需安装环境,5款主流JavaScript在线运行工具推荐
2026-11-03 18:23:26
JS怎么将地址栏查询字符串转换为JSON对象
2026-11-03 18:10:29
