JavaScript Number类型详解:数值表示、转换与Math对象

作者:工具松鼠

时间:2026-10-30

浏览:409

本文详细解析JavaScript中Number类型的底层机制,涵盖IEEE 754标准下的整数与浮点数表示、八进制与十六进制的字面量规则。深入讲解Number、parseInt和parseFloat的转换逻辑,辨析NaN与Infinity的特殊行为,并系统梳理Math对象提供的数学方法与常量,帮助开发者准确处理数值计算与类型转换。

文章目录

JavaScript数值表示基础

JavaScript采用IEEE 754格式来存储整数和浮点数值。对于浮点数值,定义中必须包含小数点,且小数点后至少需要有一位数字。在内存占用方面,浮点数所需的存储空间是整数的两倍。尽管浮点数最高能保留17位小数精度,但在实际进行算术运算时,其精度表现远不如整数。

JavaScript数值表示基础

数值字面量格式

JavaScript支持多种数值字面量格式,包括十进制、八进制以及十六进制。需要注意的是,在严格模式下使用八进制字面量是无效的。八进制字面量的书写规则是以数字0开头,后接0到7之间的数字序列。如果字面值中的数值超出了有效范围,前导的0将被忽略,剩余部分会被当作十进制数进行解析。


070//56
079//79

十六进制字面量的前两位必须是0x,随后跟随十六进制数字(0-9以及A-F)。其中的字母A到F既可以使用大写,也可以使用小写,系统均能正确识别。


0xA//10

当进行算术计算时,所有以八进制或十六进制表示的数值,最终都会被自动转换为十进制数值参与运算。

JavaScript规定了数值的取值范围,超出该范围的计算结果将产生特殊值。

JavaScript数值表示基础

数值范围与特殊值

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


-10/0//-Infinity
10/0//Infinity

JavaScript数值表示基础

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

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章