我有那个表达式
if (a === Infinity && b === 0 || a === -Infinity && b === 0 || a === 0 && b === Infinity || a === 0 && b === -Infinity) {
return NaN
}
我想缩短它,但是我不知道怎么做
如果可以,我不能用isFinite()
,如何缩短else?
您可以使用!isFinite()
来测试是否为Infinity
或-Infinity
。
if ((!isFinite(a) && b === 0) || (!isFinite(b) && a === 0)) {
return NaN;
}
如果a
和b
是数字类型,则:
if (!(a*b || isFinite(a+b))) return NaN;
如果你的过滤器警告使用全局函数,那么:
if (!(a*b || Number.isFinite(a+b))) return NaN;
如果你不能使用乘法:
if (!(a && b || Number.isFinite(a+b))) return NaN;
Math.abs
,然后检查最小值为0,最大值为无穷大,应该可以做到。
const nums = [a, b].map(Math.abs);
if (Math.min(...nums) === 0 && Math.max(...nums) === Infinity) {
return NaN;
}
可以对数组进行排序。
const nums = [a, b]
.map(Math.abs)
.sort(a, b) => a - b); // .sort() works too, but could be more confusing
if (nums[0] === 0 && nums[1] === Infinity)) {
return NaN;
}