0

当我看到 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

4 回答 4

2

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

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

于 2013-03-07T12:10:01.817 回答
1

加号运算符将值转换为数字。

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

于 2013-03-07T12:08:59.433 回答
1

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

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

干杯! :)

于 2013-03-07T12:13:44.547 回答
1

一元运算+符产生与其操作数等效的数字,并且NaN如果操作数不能转换为数字。

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

  • !!foo- 转换foo为布尔值
  • ~~foo- 转换foo为 32 位有符号整数
于 2013-03-07T12:20:20.467 回答