forEach在未定义的数组中失败

时间:2016-06-01 11:33:07

标签: javascript for-loop foreach undefined-behavior

我用了很长时间

for (var n in nodes) {f(nodes[n])} 

非常成功。但是,切换到整洁

nodes.forEach(f)

我注意到它在未定义的节点上失败,whareas for-in循环没有。我想知道,我怎样才能让每个人以相同的方式运作?

4 个答案:

答案 0 :(得分:3)

嗯,你不能。由于.forEach只是一个功能,因此您无法在null / undefined上调用某个功能。你能做的是:

(arr || []).forEach(f);

但是对于这些情况,我建议使用for of循环或常规for循环,它们都与.forEach相同。 for in具有不同的语义。

答案 1 :(得分:1)

首先使用for(;;)循环测试来确定是否存在undefined

您不应该使用for ( in )来迭代类似数组的对象。您应该使用for(;;)循环或使用标准数组循环函数,并将对象作为其上下文(例如Array.protoype.forEach.call(arrayLikeObject, fn)

答案 2 :(得分:1)

我建议您先使用Array.isArray

进行检查
Array.isArray(nodes) && nodes.forEach(cb);

答案 3 :(得分:-1)

添加if (typeof nodes !== 'undefined')

会更干净