JavaScript Number 数据类型详解:格式、范围与转换
本文详细解析 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_VALUE5e-324 - 最大数值:
Number.MAX_VALUE1.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('')); // 0parseInt() 函数 ++在需要获取整数时优先使用 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内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
JS空字符串、null和undefined转数字的结果是什么
2026-11-05 14:49:16
CodePen、JSFiddle与StackBlitz:主流JS在线编辑器对比
2026-11-05 13:38:29
JS怎么将时间戳转换为“刚刚”、“几分钟前”等相对时间
2026-11-05 12:55:14
JavaScript将儒略日逆向还原为公历日期时间的实现方法
2026-11-04 23:51:05
能在我的世界手机版直接修改JS代码吗
2026-11-04 19:02:53
