我刚刚阅读了底层源代码,无法从这段代码中获得观点:
_.each = _.forEach = function(obj, iterator, context) {
if (obj == null) return obj;
iterator = createCallback(iterator, context);
var i, length = obj.length;
if (length === +length) { // why +length?
for (i = 0; i < length; i++) {
iterator(obj[i], i, obj);
}
} else {
var keys = _.keys(obj);
for (i = 0, length = keys.length; i < length; i++) {
iterator(obj[keys[i]], keys[i], obj);
}
}
return obj;
};
为什么长度=== +长度?如果长度不是数字,我想这用于强制转换? 有人可以帮我一把吗?
答案 0 :(得分:5)
+ length是将任何内容转换为数字的方法。
如果它是一个数字,则值不会改变,并且比较返回true。 如果它不是数字,则断言是错误的。
答案 1 :(得分:2)
+length
将任何长度值转换为数字(如果不可能,则为NaN)。
所以length===+length
只测试length
实际上是一个数字(不是可以转换为数字的字符串),而且它不是NaN(不是'等于自己。)