什么是代码"长度=== +长度"用JavaScript表示?

时间:2014-07-24 07:09:04

标签: javascript

我刚刚阅读了底层源代码,无法从这段代码中获得观点:

_.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;
};

为什么长度=== +长度?如果长度不是数字,我想这用于强制转换? 有人可以帮我一把吗?

2 个答案:

答案 0 :(得分:5)

+ length是将任何内容转换为数字的方法。

如果它是一个数字,则值不会改变,并且比较返回true。 如果它不是数字,则断言是错误的。

What is unary + used for in Javascript?

答案 1 :(得分:2)

+length将任何长度值转换为数字(如果不可能,则为NaN)。

所以length===+length只测试length实际上是一个数字(不是可以转换为数字的字符串),而且它不是NaN(不是'等于自己。)