为什么我的列表减少超过游戏手柄时间戳会导致NaN?

时间:2017-07-06 09:44:36

标签: javascript gamepad

我简单地减少了JavaScript:

navigator.getGamepads().reduce((i, j) => i.timestamp * j.timestamp, 1)

如果没有游戏手柄,则结果为1

当有一个游戏手柄时,结果为NaN

但是,列表的值为number

navigator.getGamepads().map(x => x.timestamp)
Array [ 280868.92 ]

navigator.getGamepads().map(x => typeof x.timestamp)
Array [ "number" ]

这是为什么?

我使用的是64位的Firefox 54.0

2 个答案:

答案 0 :(得分:2)

navigator.getGamepads().reduce((i, j) => i.timestamp * j.timestamp, 1)中的Reduce函数得到1作为第一次迭代的第一个参数。 timestamp属性为undefined,这就是你获得NaN的原因。

您可以尝试这样的事情:

navigator.getGamepads().reduce((i, j) => i.timestamp * j.timestamp, {timestamp: 1})

答案 1 :(得分:1)

当没有游戏手柄时,结果为1.因为你的初始值是1.这是你的reduce函数的第二个参数:

navigator.getGamepads().reduce((i, j) => i.timestamp * j.timestamp, 1)
  • 第一个论点:(i, j) => i.timestamp * j.timestamp
  • 第二个论点:1

当有一个游戏手柄时,你将你的功能应用到myGamepad,1

(1, myGamepad) => 1.timestamp * myGamepad.timestamp

myGamepad有一个时间戳,但你的初始值没有,所以它返回一个NaN

也许你可以像这样创建一个初始值

let initValue = {timestamp: 1}
navigator.getGamepads().reduce((i, j) => i.timestamp * j.timestamp, initValue )