在本书 Javascript:David Flanagan 的权威指南第六版第 147 页中,作者讨论了使用 for..in 循环遍历数组时的警告,以下是引用(粗体是我的)
...因此,您不应在数组上使用 for/in 循环,除非您包含额外的测试来过滤掉不需要的属性。 您可以使用以下任一测试:
for(var i in a) { if (!a.hasOwnProperty(i)) continue; // Skip inherited properties // loop body here } for(var i in a) { // Skip i if it is not a non-negative integer if (String(Math.floor(Math.abs(Number(i)))) !== i) continue; }
现在第一个代码片段对我来说很清楚,继承的属性将被跳过。
但是,我根本不清楚第二个代码片段。
据我了解,第二个代码片段将跳过数组的任何非数字属性(无论它是否是自己的属性(与第一个代码片段不同))
但如果是这样的话,你不能只使用一个简化的测试,比如:
if (Number(i) != i) continue;
那么作者为什么要用这么复杂的表达方式呢?
我在这里错过了什么吗?