在typeof()显示为number时出现NaN错误。
在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错误的情况下显示结果?
在这段代码中,出现了一个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的文档。
在使用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错误的原因以及解决方法。