我有以下代码:
const obj = {};
console.log( Math.max(obj.number, 0) );
我需要避免得到NaN
。为此,我要做的是:
console.log(Math.max(obj.number ?? 0, 0));
但我不知道这是否正确,因为可能会有特殊情况。有什么建议吗?
发布于 2022-10-13 21:48:09
console.log(Math.max(obj.number ? 0,0));
但我不知道这是否正确,因为可能会有特殊情况。有什么建议吗?
假设number
缺失或数字(如果存在),那么当前的解决方案可能是最干净的解决方案之一。
作为另一种选择,您可以通过在创建obj.number
时使用默认值或初始值来确保obj
始终存在。这样,obj.number
将始终存在,因此Math.max(obj.number, 0)
将永远不会返回NaN
。
发布于 2022-10-13 21:21:30
如果obj.number
是一个函数,那么您也会得到NaN。我认为您最好明确检查类型:
const obj = {
a: 1,
b: 1234567891011121314151617181920,
c: true,
d: function() {},
e: undefined
};
console.log(Math.max(typeof obj.a === "number" && obj.a, 0));
console.log(Math.max(typeof obj.b === "number" && obj.b, 0));
console.log(Math.max(typeof obj.c === "number" && obj.c, 0));
console.log(Math.max(typeof obj.d === "number" && obj.d, 0));
console.log(Math.max(typeof obj.e === "number" && obj.e, 0));
如果您对检查感到困惑:Math.max
将输入强制输入到一个数字,因此undefined
将是NaN
,但false
将为0。因此,如果条件(typeof a === "number"
)失败,我们将得到0,所以无论如何它都是0。
如果出于某种原因,您希望能够使用可以强制使用数字的值,您可以这样做(其中n
是您的数字):
Math.max(!isNaN(n) && n, 0)
发布于 2022-10-13 21:22:55
如果您确信??
操作数不是字符串或除null
、undefined
或number
以外的任何其他类型,则这里的n
操作数是正确的解决方案。如果左边的值是null
或undefined
,则使用右值。
但是,如果您不确定这一点,那么您应该用显式数字类型??
:Math.max(typeof object.n === 'number' ? object.n : 0, 0)
来代替它--这样就可以处理任何可能的情况,这样就永远不会得到结果中的NaN
。
https://stackoverflow.com/questions/74061858
复制相似问题