加上运算符在Underscore.js中意味着什么?

时间:2013-03-07 12:07:47

标签: javascript underscore.js

当我看到Underscore.js(版本1.4.3)代码时,我看到以下行(79行)

   if (obj.length === +obj.length) {
        for (var i = 0, l = obj.length; i < l; i++) {
            if (iterator.call(context, obj[i], i, obj) === breaker) return;
        }
    }

我不明白为什么+运算符在 if 语句中使用。 (+ obj.length)
而且,这句话总是真实吗? 我不认为这是一个错字。必须有一些目标才能使用它。如果有人知道这种用法的好处,我希望将来能够使用它。
谢谢。

4 个答案:

答案 0 :(得分:2)

obj.length可能是任何类型 - 例如undefined+obj.length始终是一个数字。

因此代码基本上检查length属性是否存在且是否为数字。检查的原因是_.each()接受数组和非数组对象。在数组的情况下,length属性是迭代其元素所必需的,而for..in循环是非数组对象的方法。

答案 1 :(得分:1)

plus运算符将值转换为Number。

基本上,a === +a确保a是数字而不是字符串。

答案 2 :(得分:1)

它将值转换为数字。我发现这篇文章很有帮助:

http://www.2ality.com/2012/01/object-plus-object.html

干杯! :)

答案 3 :(得分:1)

一元+运算符导致其操作数的等效数字,如果操作数无法转换为数字,则为NaN

这是Javascript中存在的许多小“技巧”​​之一:

  • !!foo - 将foo转换为布尔值
  • ~~foo - 将foo转换为32位有符号整数