为什么此计算返回-Infinity?

时间:2019-06-11 11:58:37

标签: javascript node.js

所以我需要在脚本中进行一些简单的减法计算,但是事实证明它并不是那么简单,我在这里做错了什么?

x= dbo.collection("master").find({Process: "Process1"}).toArray(); //Query my Mongo database
s1 = Math.max.apply(null, x.map(o => o.NumberInt)); //narrow down query to find the correct number 
s2 = (s1-1); //minus 1 from the result to find next result
//s2 returns -Infinity

我100%确保s1是整数

2 个答案:

答案 0 :(得分:3)

  

为什么此计算返回-Infinity?

检查Math.max.apply(null, input)可以返回Infinity-Infinity的条件很容易

function  doTheMagic(input){
    return Math.max.apply(null, input);
}


console.log(doTheMagic([1,2]));
console.log(doTheMagic(["1","2"]));
console.log(doTheMagic([null, undefined]));
console.log(doTheMagic([Infinity]));
console.log(doTheMagic(null));
console.log(doTheMagic({}));
console.log(doTheMagic([]));

-Infinity出现在任何您有null,空数组或空白对象的地方-可能还有其他一些地方。这些是您的代码最有可能产生的结果。

我会弯腰,建议您的x.map(o => o.NumberInt)返回一个空数组。

答案 1 :(得分:0)

如果提供的参数不是数字(或不能强制为数字),则结果将为<audio src="http://username:password@webdav.server" crossorigin="use-credentials" />

NaN仅在不带任何参数的情况下返回Math.max

-Infinity

但是您正在使用console.log(Math.max()); // -Infinity console.log(Math.max(1)); // 1 console.log(Math.max("")); // 0 (coerced to 0) console.log(Math.max({})); // NaN (not a number)。 如果Math.max.apply(null, x.map(o => o.NumberInt));的第二个参数不可迭代,则不会有任何参数传递给Function#apply,这与具有空数组相同。

要检查对象是否可迭代,可以使用以下表达式:

Math.max

最后,if (typeof x[Symbol.iterator] === "function") console.log("I am iteratable."); 为空或不可迭代的对象。