首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript -Math.max(未定义,0)返回NAN

JavaScript -Math.max(未定义,0)返回NAN
EN

Stack Overflow用户
提问于 2022-10-13 21:13:43
回答 3查看 76关注 0票数 1

我有以下代码:

代码语言:javascript
运行
复制
const obj = {};
console.log( Math.max(obj.number, 0) );

我需要避免得到NaN。为此,我要做的是:

代码语言:javascript
运行
复制
console.log(Math.max(obj.number ?? 0, 0));

但我不知道这是否正确,因为可能会有特殊情况。有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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

票数 1
EN

Stack Overflow用户

发布于 2022-10-13 21:21:30

如果obj.number是一个函数,那么您也会得到NaN。我认为您最好明确检查类型:

代码语言:javascript
运行
复制
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是您的数字):

代码语言:javascript
运行
复制
Math.max(!isNaN(n) && n, 0)
票数 1
EN

Stack Overflow用户

发布于 2022-10-13 21:22:55

如果您确信??操作数不是字符串或除nullundefinednumber以外的任何其他类型,则这里的n操作数是正确的解决方案。如果左边的值是nullundefined,则使用右值。

但是,如果您不确定这一点,那么您应该用显式数字类型??Math.max(typeof object.n === 'number' ? object.n : 0, 0)来代替它--这样就可以处理任何可能的情况,这样就永远不会得到结果中的NaN

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74061858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档