当我看到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)
而且,这句话总是真实吗?
我不认为这是一个错字。必须有一些目标才能使用它。如果有人知道这种用法的好处,我希望将来能够使用它。
谢谢。
答案 0 :(得分:2)
obj.length
可能是任何类型 - 例如undefined
。 +obj.length
始终是一个数字。
因此代码基本上检查length
属性是否存在且是否为数字。检查的原因是_.each()
接受数组和非数组对象。在数组的情况下,length
属性是迭代其元素所必需的,而for..in
循环是非数组对象的方法。
答案 1 :(得分:1)
plus运算符将值转换为Number。
基本上,a === +a
确保a是数字而不是字符串。
答案 2 :(得分:1)
答案 3 :(得分:1)
一元+
运算符导致其操作数的等效数字,如果操作数无法转换为数字,则为NaN
。
这是Javascript中存在的许多小“技巧”之一:
!!foo
- 将foo
转换为布尔值~~foo
- 将foo
转换为32位有符号整数