是什么加上运营商Underscore.js是什么意思?(What does plus operato

2019-08-17 09:16发布

当我看到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)
而且,是不是这个语句总是真的吗?
我不认为这是一个错字。 必须有一些旨在使用。 如果有人知道这种用法的好处,我想在将来使用它。
谢谢。

Answer 1:

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

因此,如果代码基本上检查length属性存在并且是一个数字。 这样做的原因检查是_.each()可同时接收阵列和非阵列对象。 在阵列的情况下的length属性是必要遍历其元素而for..in循环是在非阵列对象的情况下,走的方式。



Answer 2:

而加数值转换为数字。

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



Answer 3:

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

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

干杯! :)



Answer 4:

一元+操作结果在其操作数的数字等同物,并NaN如果操作数不能被转换为数字。

这是一个数字的存在在Javascript小“窍门”之一:

  • !!foo -转换foo成布尔
  • ~~foo -转换foo到一个32位带符号整数


文章来源: What does plus operator mean in Underscore.js?