检测Javascript中的数字溢出

时间:2019-03-13 07:22:56

标签: javascript

javascript中是否有任何内置函数会通知数字数据类型的算术运算溢出? 就像c#和Java一样。

1 个答案:

答案 0 :(得分:2)

与您所引用的语言不同,如果执行了无效的数学运算,则JavaScript不会引发。而是返回特殊数字值来通知您(对它们进行数学运算总是会再次产生该特定值,因此您只需在算术链的末尾检查它们即可):

 NaN // Operation could not be done
 Infinity // Number was too large
 -Infinity // Number was too small

对于所有这三种特殊情况,您可以使用isFinite进行检查:

 // a = 1000, b = 1000, c = 1 -> Infinity
 // a = -1000, b = 1001, c = 1 -> -Infinity
 const a = 2, b = 51, c = 0; // divide by zero -> NaN
 const result = a ** b / c;
 if(!isFinite(result)) {
   console.log("invalid operation");
 }

还要注意,JavaScript数字是浮点数,其精确整数范围在(-2 ** 53,2 ** 53)之间,超出该整数的每个整数都会失去精度。这同样适用于任何永远都不准确的非整数算法。