我一直在阅读underscore.js源代码并注意到这个比较_.each():
(obj.length === +obj.length)
我知道 + 在变量将其转换为数字/整数之前。所以在这个原因
[1,2,3].length === +[1,2,3].length
是真的。如果我传入一个对象:
var obj = {a: 1, b: 2, c: 3};
+obj.length
产生NaN
在最后一种情况下,我有
[1,2,3, {a: [4,5,6]}].length
这是 4. 将其转换为一个数字.. 仍然是 4。
从else case决定,我可以看到这种比较可能是为了区分数组和对象,就像它使用的 else case 一样:
for (var key in obj) { ...
我看不出有任何理由使用这种比较。谁能解释一下?