2012-10-31 144 views
5

我注意到幾個MDN陣列方法的墊片,如this one第7行,使得它們可使用以下語法:Object(這個)做什麼?

var t = Object(this); 

this是一個數組。這不僅暗示我的驗證者,我也無能爲力。

任何人都可以發光嗎?

+0

是不是像C++中的複製構造函數? – 2012-10-31 09:11:13

+2

[forEach的官方實現中的「var t = Object(this)」的重點是什麼?](http://stackoverflow.com/questions/6498487/whats-the-point-of-var-t -objectthis-the-official-implementation-of-for) – finnw

回答

3

據我所知,只有當它將字符串文字傳遞給Array.prototype.indexOf時,纔會用到它。如果你刪除它,並傳遞一個字符串中你會得到一個錯誤:

TypeError: Cannot use 'in' operator to search for '0' in string

然而,由字符串字面鑄造的String一個實例,你最終與該字符串的每個字符數值屬性的對象,並且由於它是一個正常的對象,你可以使用它的in符和方法會返回字符串中的字符的索引:

Array.prototype.indexOf.call("hello", "e"); // Returns 1 

這裏的an example with the cast to Object,這裏的an example without it


在更一般的情況下,將任何東西傳遞給Object構造函數將嘗試將該東西轉換爲對象。所以你可以將它傳遞給一個字符串文字並獲得String的實例,或者將它傳遞給一個數字文字並獲得一個Number的實例。

+0

它不適用於任何布爾值,數字,空值或未定義的值 - 基本上每個原始值。 – Bergi

+0

@Bergi - 我不完全確定該代碼的原因是什麼......它不在[現在位於MDN上]的polyfill中(https://developer.mozilla.org/en-US/docs/Web/JavaScript /參考/ Global_Objects /陣列/的indexOf#填充工具)。我隱約記得爲這個答案研究它,但是那顯然是前一陣子。 –

+0

是的,[MDN是一個wiki](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf$history?limit=all)。 – Bergi