2013-02-14 35 views
4

通過underscore.js源代碼中,我偶然發現了following line閱讀:Javascript成語:if(x === + x)是做什麼用的?

... if (obj.length === +obj.length) { ... 

這對我來說有點混亂。實際上在這裏比較什麼?我相信它有一些關於檢測本地數組的問題,但無法弄清楚實際發生了什麼。 +是做什麼用的?爲什麼用===而不是==?這種風格的性能優勢是什麼?

回答

6

+值強制轉換到一個號碼(很像!!它強制轉換爲布爾值)。

if (x === +x) 

...可用於確認x本身包含一個整數值。在這種情況下,可能需要確保obj的長度屬性是一個整數並且沒有被字符串值覆蓋,因爲如果obj被視爲數組,則可能會導致迭代。

+0

JavaScript中沒有整數。 – 2013-02-14 16:34:49

+0

'+'5.5''是'5.5',您正在尋找_Number_。 (&@Salman,整數將在ES6中引入) – 2013-02-14 16:35:51

+2

準確地說'+'是'parseFloat'的快捷方式,而不是'parseInt'。所以它強制浮點值(或*「Number」*類型)。 – VisioN 2013-02-14 16:35:59

1

檢查obj.length是否爲Number是一種愚蠢的(IMO)方法。這是更好的:

typeof obj.length == "number" 
+3

爲什麼這很愚蠢?什麼是首選的替代方案? – Saintali 2013-02-14 16:31:52

+0

我不認爲這很愚蠢。也許它比'typeof'更快。 – VisioN 2013-02-14 16:34:43

+0

懶惰?是的...愚蠢? nahhh ...'Number(obj.length)'是要輸入的更多內容;) – itsid 2013-02-14 16:35:49

1

+將右側的數字合併爲一個數字。

在這種情況下,如果長度不是對象上的屬性,則undefined將被返回。 + undefined將產生Nan,這種評估是錯誤的。

如果字符串可以是連貫的-ED成多個那麼這將是.. e.g + '1'將產生1作爲Number這與十六進制值以字符串形式處理例如當是特別重要+'0x7070'收益率28784

+0

有趣。我猜''+的價值,但一個數字「'也是'NaN'? – Saintali 2013-02-14 16:37:05

+0

更新我的答案澄清!如果你需要其他東西,讓我知道! – Jay 2013-02-15 21:13:24

+0

很酷。謝謝! – Saintali 2013-02-16 15:50:22

相關問題