Javascript 为什么分割部分使输出成为NaN
我下面的代码用于将所有值相加,并在尝试分割它输出的项目(/val.flowers)时显示总数Javascript 为什么分割部分使输出成为NaN,javascript,Javascript,我下面的代码用于将所有值相加,并在尝试分割它输出的项目(/val.flowers)时显示总数 trimPerFlowerA(){ let lineA = this.model.processed.filter(val => val.originatingLine === 'A'); if(lineA.length > 0) return lineA.map(val => {
trimPerFlowerA(){
let lineA = this.model.processed.filter(val => val.originatingLine === 'A');
if(lineA.length > 0)
return lineA.map(val => {
return (val.trimA+val.trimB+val.trimC+val.flowerOilGrade/val.flowers)
}).reduce((a,b) => a+b,0);
return 0;
}
如果我下赌注,我会说你有一些
未定义的
这个问题实际上取决于您的输入数据,因此取决于This.model.processed
的内容。
一般来说,JavaScript中的大量计算可能会导致NaN
一些典型的情况是:
- “A”/0
- “A”/“B”
- 0/“A”
- 0/0
- NaN/0
- 0/NaN
- 南/南
- 未定义/10
- 1/未定义
但是,在您的特定情况下,问题也可能不在除法中,而在(val.trimA+val.trimB+val.trimC+val.flowerOilGrade/val.flowers)
表达式中的和中。
特别是,您还可以将NaN
用于:
- 南+1/10
- 未定义+1
和所有类似的表达
我建议设置一些断点并验证各个值。如果条目的数量不适合断点,请尝试在这些值上添加一些console.log
,然后检查它们。这应该允许您精确定位导致输出为NaN
的特定值
还有,一旦你发现了问题,您可能希望通过添加针对有效和无效输入数据的单元测试来覆盖您的基础。如果不看到lineA
,很难说。这可能表明val.flowers
为零或未定义。或者不是数字或无法解析为numberrit,这意味着计算中涉及的内容之一是valueNaN
或是一个非数字,隐式解析时无法将其解析为数字。在这一点上,由于对NaN
的任何数学运算都会导致NaN
,因此它会在整个计算过程中传播。了解原因的唯一方法是查看变量中的值。在它上面设置一个断点,并检查它们。@John-如果它为零,结果将是无穷大
,而不是NaN
。(JavaScript句柄通过使用Infinity
除以零)