我正在查看Underscore.js库的源代码,特别是map方法(在该页面的第85行左右,并在此处复制):
除了以下这行内容外,整个过程非常简单明了。
现在,我理解这句话的意思是“如果对象长度不是负数……”,
如果我的理解正确,那么它可能是负数!亲爱的专家们,请问什么类型的对象可能会是负数?
_.map = function(obj, iterator, context) {
var results = [];
if (obj == null) return results;
if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
each(obj, function(value, index, list) {
results[results.length] = iterator.call(context, value, index, list);
});
if (obj.length === +obj.length) results.length = obj.length;
return results;
};
除了以下这行内容外,整个过程非常简单明了。
if (obj.length === +obj.length) results.length = obj.length;
现在,我理解这句话的意思是“如果对象长度不是负数……”,
如果我的理解正确,那么它可能是负数!亲爱的专家们,请问什么类型的对象可能会是负数?
obj.length === +obj.length
是否为 false
?我的理解是 ===
可能会返回 false
,如果 obj.length
的类型与 +obj.length
的类型不匹配,但在这里我的知识不足。 +
可以对 obj.length
可能的类型做什么样的事情? x === +x
是一种我不知道的通用惯用测试吗?这是对 underscore.js 深层次出现的某些特殊情况的响应吗?例如,underscore.js 是否分配并跟踪负的 object.length 以满足某些常规目的?指导和建议将不胜感激。
+x
不一定是正数——它只是x
的数值。因此,如果var x = -10
,那么+x
也是-10
。 - Tikhon Jelvis