javaScript中是否有任何内置函数会通知,在数字数据类型上溢出算术操作?像c#和java一样。
从此站点检查:IssafeInteger
var x = Number.MAX_SAFE_INTEGER + 1;
var y = Number.MAX_SAFE_INTEGER + 2;
console.log(Number.MAX_SAFE_INTEGER);
// expected output: 9007199254740991
console.log(x);
// expected output: 9007199254740992
console.log(y);
// expected output: 9007199254740992
console.log(x === y);
// expected output: true
function warn(a) {
if (Number.isSafeInteger(a)) {
return 'Precision safe.';
}
return 'Precision may be lost!';
}
console.log(warn(Number.MAX_SAFE_INTEGER));
// expected output: "Precision safe."
console.log(warn(x));
// expected output: "Precision may be lost!"
console.log(warn(y));
// expected output: "Precision may be lost!"
与您所引用的语言不同,如果完成了无效的数学操作,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)之间具有精确的整数范围,其外部每个整数都将失去准确性。同样适用于永远不准确的任何非整数算术。