2013-03-07 83 views
0

當我看到Underscore.js(版本1.4.3)的代碼,我看到了下面幾行(79行)Underscore.js中加號運算符的含義是什麼?

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

我不明白爲什麼如果語句中使用+操作。 (+ obj.length)
而且,是不是這個聲明總是true
我不認爲這是一個錯字。必須有一些目標來使用它。如果有人知道這種用法的好處,我想在將來使用它。
謝謝。

+0

[JavaScript中的= + \ _ mean是什麼意思]可能的重複(http://stackoverflow.com/questions/15129137/what-does-mean-in-javascript) – Quentin 2013-03-07 12:14:58

回答

2

obj.length可能是任何類型 - 例如undefined+obj.length始終是一個數字。

所以代碼基本上會檢查length屬性是否存在並且是一個數字。檢查的原因是​​接受數組和非數組對象。在數組的情況下,length屬性是迭代其元素所必需的,而for..in循環是在非數組對象的情況下要走的路。

1

加號運算符將值轉換爲數字。

基本上,a === +a確保a是一個數字而不是一個字符串。

1

運算符的一元運算符+與其操作數等效,如果操作數不能轉換爲數字,則返回NaN

這是一個數字的存在在Javascript小 「竅門」 之一:

  • !!foo - 轉換foo到布爾
  • ~~foo - 轉換foo爲32位有符號整數
相關問題