在JavaScript或underscore.js中可能出现负面对象长度?含义?

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?非常感谢指导和建议.

qwe*_*ymk 4

我认为这是测试看看是否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)