javascript判断数字是否超出安全范围,核心是检查其是否在number.min_safe_integer(-9007199254740991)与number.max_safe_integer(9007199254740991)之间(含边界),推荐用内置常量直接比较。

JavaScript 中判断数字是否超出安全范围,核心是检查该数字是否在 Number.MIN_SAFE_INTEGER 和 Number.MAX_SAFE_INTEGER 之间(含边界)。
用内置常量直接比较
这是最直观、推荐的方式。JavaScript 提供了两个精确表示整数的边界值:
Number.MIN_SAFE_INTEGER === -9007199254740991Number.MAX_SAFE_INTEGER === 9007199254740991
只要数字是有效数值(typeof x === 'number' && !isNaN(x)),就可以直接比较:
function isSafeInteger(num) {
return Number.isFinite(num) &&
num >= Number.MIN_SAFE_INTEGER &&
num
<h3>优先使用 <code>Number.isSafeInteger()</code>
</h3>
<p>ES6 原生提供了更简洁可靠的判断方法:<code>Number.isSafeInteger()</code>。它内部已做了多重校验,包括是否为有限数值、是否为整数、是否在安全范围内。</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill3430" title="Alibabacloud Sdk Client Initialization For Java"><img
src="https://img.php.cn/upload/skill/000/000/081/178955835420587.jpg" alt="Alibabacloud Sdk Client Initialization For Java" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill3430" title="Alibabacloud Sdk Client Initialization For Java" class="overflowclass">Alibabacloud Sdk Client Initialization For Java</a>
<p class="overflowclass">在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。</p>
</div>
<a rel="nofollow" href="/xiazai/skill3430" title="Alibabacloud Sdk Client Initialization For Java" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>
- 返回
true当且仅当参数是安全整数(即:是整数,且在 ±2⁵³−1 范围内) - 自动排除
NaN、Infinity、小数、字符串等非安全整数类型
console.log(Number.isSafeInteger(9007199254740991)); // true
console.log(Number.isSafeInteger(9007199254740992)); // false(超出上限)
console.log(Number.isSafeInteger(1.5)); // false(不是整数)
console.log(Number.isSafeInteger('123')); // false(不是 number 类型)
注意隐式转换和大数陷阱
从字符串或外部输入解析数字时,容易因精度丢失导致误判。例如:
-
parseInt('90071992547409919')可能返回90071992547409920(已失真) -
JSON.parse('{ "id": 90071992547409919 }')在解析超安全整数的数字时会悄悄失去精度
若需处理可能超限的大整数(如 ID、时间戳),建议:
- 后端返回字符串形式的数字(如
"90071992547409919") - 前端用
BigInt或专用库(如big-integer)做运算 - 避免对高精度字符串直接调用
Number()或一元加号+
扩展:快速检测并给出提示
实际项目中可封装一个带反馈的工具函数:
function checkNumberSafety(num) {
if (!Number.isFinite(num)) {
return { safe: false, reason: 'not a finite number' };
}
if (!Number.isInteger(num)) {
return { safe: false, reason: 'not an integer' };
}
if (num Number.MAX_SAFE_INTEGER) {
return {
safe: false,
reason: 'out of safe integer range',
range: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER]
};
}
return { safe: true };
}Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










