JavaScript Number 数据类型详解:格式、范围与转换

作者:小满

时间:2026-10-25

浏览:115

本文详细解析 JavaScript 中的 Number 类型,涵盖 IEEE 754 双精度浮点数标准、数值字面量格式(十进制、八进制、十六进制)、浮点数精度问题及 Infinity 范围。重点讲解 NaN 的特性、isNaN 与 isFinite 函数的用法,以及 Number、parseInt 和 parseFloat 在类型转换中的区别与最佳实践。

文章目录

前言

Number 类型采用 IEEE 754 格式来存储整数和浮点数值(部分其他编程语言中称为双精度值)。

IEEE 二进制浮点数算术标准定义了浮点数的计算规范。

IEEE 754规定了四种表示浮点数值的方式:单精确度(32位)、双精确度(64位)、延伸单精确度(43比特以上,很少使用)与延伸双精确度(79比特以上,通常以80位实现)。

JavaScript 中使用的正是双精度(64位)格式。

不同的数值类型对应不同的字面量表示格式:

  • 十进制整数
  • 八进制(基数为 8)
  • 十六进制(基数为 16)

1、浮点数

浮点数值必须包含小数点,且小数点后至少需要有一个数字。

经典问题:0.1 + 0.2 是否等于 0.3?答案是不相等。

这是因为浮点数运算过程中存在舍入误差。该误差源于使用 IEEE 754 数值标准,并非 ECMAScript 独有,所有采用此格式的语言均存在此问题。

2、值的范围

  • 最小数值: Number.MIN_VALUE 5e-324
  • 最大数值: Number.MAX_VALUE 1.797 693 134 862 315 7e+308
  • 当数值超出 JavaScript 表示范围时,分别显示为 Infinity(正无穷大)或 -Infinity(负无穷大)。
  • 使用 isFinite() 函数可确定数值是否为有限数。

3、NaN

  • 含义:不是数值(Not a Number)。
  • NaN 表示原本应返回数值的操作失败(而非抛出错误)。
  • 任何涉及 NaN 的操作始终返回 NaN。
  • NaN 不等于任何值,包括 NaN 自身,即 console.log(NaN == NaN); // false
  • 使用 isNaN() 函数可判断传入参数是否非数值;
  • isNaN() 会尝试将参数转换为数值
console.log(isNaN(NaN)); // true
console.log(isNaN('abc')); // true
console.log(isNaN('123')); // false
console.log(isNaN(true)); // false
console.log(isNaN(12)); // false

首先调用对象的 valueOf() 方法,再确定返回值是否可转换为数值;若不能,则调用 toString() 方法并测试其返回值。

4、数值转换

  • 将非数值转换为数值

Number() 函数可用于任何数据类型:

前言

console.log(Number(false)); // 0
console.log(Number(null)); // 0
console.log(Number(undefined)); // NaN
console.log(Number(1)); // 1
console.log(Number(0012)); // 10 八进制转换
console.log(Number(070)); // 56 八进制转换
console.log(Number(0x1f)); // 31 十六进制转换为十进制整数
console.log(Number(018)); // 18 忽略前面0
console.log(Number(12.23)); // 12.23
console.log(Number('123')); // 123
console.log(Number('123bule')); // NaN
console.log(Number(' 123')); // 123
console.log(Number('')); // 0

parseInt() 函数 ++在需要获取整数时优先使用 parseInt() 函数;++ (若明确希望取整,Number() 函数转换字符串相对复杂,此时优先使用 parseInt() 函数)。

parseInt() 函数会忽略字符串前导空格,从第一个非空格字符开始转换;若首个字符不是数值字符、加号或减号,则立即返回 NaN。

parseInt() 更关注字符串中是否包含数值,如下:

console.log(parseInt(123)); // 123
console.log(parseInt(0123)); // 83 解释为八进制整数。
console.log(parseInt(false)); // NaN
console.log(parseInt('123')); // 123
console.log(parseInt('0123')); // 123
console.log(parseInt('123.23')); // 123
console.log(parseInt('123bule')); // 123
console.log(parseInt(' 123')); // 123
console.log(parseInt('23.74')); // 23
console.log(parseInt('')); // NaN
// 与Number()区别
console.log(Number('')); // 0
console.log(Number(false)); // 0
console.log(Number('123bule')); // 123
// 从这里可以看parseInt() 更关注于字符串是否包含数值
parseInt("0xAF", 16); // 175
parseInt("AF", 16); // 175 提供了16进制参数,可以省略0x
parseInt("AF");      // NaN , 没有提供第二个参数,就不可以

不传递底数参数相当于让 parseInt() 自行决定解析方式,为避免解析错误,建议始终传递第二个参数。

parseInt() 函数可接收第二个参数,用于指定底数(进制数);

如下:

使用 parseFloat() 函数与 parseInt() 类似。区别在于:它识别有效的小数点(即首次出现的小数点,后续小数点均被忽略);此外,它始终忽略字符串开头的零;parseFloat() 仅解析十进制值,无法指定底数;十六进制数值始终返回 0。

如下:

console.log(parseFloat('123bule')); // 123
console.log(parseFloat('23.74'));  // 23.74
console.log(parseFloat('023.74')); // 23.74
console.log(parseFloat('23.74.2')); // 23.74
console.log(parseFloat(0xAF));  // 175
console.log(parseFloat('0xAF')); // 0
console.log(parseFloat(012)); // 10
console.log(parseFloat('012')); // 12

到此这篇关于JavaScript 中的数据类型Number的文章就介绍到这了,更多相关JavaScript Number内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

实用工具推荐

电子包浆

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

使用 ›
图片压缩

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

使用 ›
相关文章