Reb*_*bin 5 javascript underscore.js
我正在查看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;
};
Run Code Online (Sandbox Code Playgroud)
以下行完全直截了当
if (obj.length === +obj.length) results.length = obj.length;
Run Code Online (Sandbox Code Playgroud)
现在,我读到这意味着"如果对象长度不是负数..."
,如果我的解释是正确的,则暗示它可能是!
所以,亲爱的专家们,对于什么样的物体可能
obj.length === +obj.length
Run Code Online (Sandbox Code Playgroud)
是false吗?我的理解===意味着它可以返回,false如果类型obj.length不匹配的类型+obj.length,但在这里我的知识不足.什么样的事情可以+对可能的事情做些obj.length什么?是x === +x某种我不知道的通用惯用测试吗?它是否响应了某种特殊情况,这种情况在underscore.js中更深层次出现,例如,underscore.js是否为某些常规目的分配和跟踪负面object.lengths?非常感谢指导和建议.
我认为这是测试看看是否typeof obj.length === 'number'
与如果它是一个长度值为'2 days'
所以它知道它是否是一个像这样的对象:
var obj = { app: 'doctor', length: '45 min' };
Run Code Online (Sandbox Code Playgroud)
与
var obj = [ 0, 2, 1];
Run Code Online (Sandbox Code Playgroud)