我用了很长时间
for (var n in nodes) {f(nodes[n])}
非常成功。但是,切换到整洁
nodes.forEach(f)
我注意到它在未定义的节点上失败,whareas for-in
循环没有。我想知道,我怎样才能让每个人以相同的方式运作?
答案 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')