面试题答案
一键面试- 超出范围的情况:
当数值超出
Number.MAX_SAFE_INTEGER
进行算术运算时,JavaScript不会抛出错误,但结果可能不准确。例如,两个大于Number.MAX_SAFE_INTEGER
的数相加,结果可能是错误的。
在上述代码中,const num1 = Number.MAX_SAFE_INTEGER + 1; const num2 = Number.MAX_SAFE_INTEGER + 2; const sum = num1 + num2; console.log(sum);
num1
和num2
已经超出了安全整数范围,相加的结果并不能准确反映数学上的真实和。 - 检测溢出情况:
可以使用
BigInt
类型来处理大数值运算,并且在使用Number
类型运算前进行检测。例如,检测两个数相加是否会溢出:function willAdditionOverflow(num1, num2) { const sum = num1 + num2; return (num1 > 0 && num2 > 0 && sum <= num1) || (num1 < 0 && num2 < 0 && sum >= num1); } const numA = 1.7976931348623157e+308; const numB = 1.7976931348623157e+308; console.log(willAdditionOverflow(numA, numB));
- 处理溢出情况:
使用
BigInt
类型来处理大数值运算,它可以准确表示任意大的整数。
在这段代码中,通过将数值转换为const bigNum1 = BigInt(Number.MAX_SAFE_INTEGER) + BigInt(1); const bigNum2 = BigInt(Number.MAX_SAFE_INTEGER) + BigInt(2); const bigSum = bigNum1 + bigNum2; console.log(bigSum);
BigInt
类型,可以准确进行大数值的运算。