在typeof()显示为number时出现NaN错误。

17 浏览
0 Comments

在typeof()显示为number时出现NaN错误。

我在编写这个非常简单的函数,我试图返回它的结果,但是我得到的只是NaN错误。

这是我的当前代码:

function m(c) {
    return Math.max(c) - this.length - 1;
}
document.getElementById('app').innerHTML = m([1,4,6,8,43,2]);

当我改为return typeof(a - this.length -1);时,我得到一个number作为结果。

function m(c) {
    return typeof(Math.max(c) - this.length - 1);
}
document.getElementById('app').innerHTML = m([1,4,6,8,43,2]);

所以我的问题是,如果我的返回语句的类型是一个数字,为什么我会得到NaN错误?

@edit 问题2:有没有办法让函数在没有NaN错误的情况下显示结果?

0
0 Comments

在这段代码中,出现了一个NaN错误,而typeof()显示的是number类型。这个问题的原因是this.length是未定义的,应该替换为c.length。另外,math.max函数的工作方式与你想象的不同。如果你查看mdn文档,可以看到他们推荐使用reduce函数来处理数组。

然而,如果数组元素过多,使用展开运算符(...)或apply方法将失败或返回错误的结果,因为它们尝试将数组元素作为函数参数传递。详情请参见有关使用apply和内置函数的文档。而使用reduce函数则不会有这个问题。

总之,修复方法如下:

function m(c) {
    var max = c.reduce(function(a, b) {
        return Math.max(a, b);
    });
    return max - c.length - 1;
}
document.getElementById('app').innerHTML = m([1,4,6,8,43,2]);

希望给出负评的人能解释一下?reduce函数来自于developer.mozilla.org的文档。

0
0 Comments

在使用typeof()函数显示类型为number时出现NaN错误的原因是,无法直接在数组上调用Math.max()函数(尝试使用Math.max([1,2]))。需要使用扩展运算符(...)。

另外,我假设您打算使用数组的长度,因为this.length并没有指向任何内容:

function m(c) {
    return Math.max(...c) - c.length - 1;
}
console.log(m([1,4,6,8,43,2]));

如果需要支持旧版本的浏览器,请将Math.max(...c)替换为:

Math.max.apply(null, c)

以上就是出现NaN错误的原因以及解决方法。

0
0 Comments

出现问题的原因是Math.max函数只能接受一系列数字作为参数,而不能直接接受一个数组作为参数。因此,需要使用apply方法来将数组作为参数列表传递给Math.max函数。

解决方法是使用Math.max.apply(null, c)来调用Math.max函数。apply方法可以将数组c作为参数列表传递给Math.max函数,并将null作为this值传递给Math.max函数。

这样,就可以避免出现NaN错误,并且正确地返回数组中的最大值。

0