我注意到幾個MDN陣列方法的墊片,如this one第7行,使得它們可使用以下語法:Object(這個)做什麼?
var t = Object(this);
凡this
是一個數組。這不僅暗示我的驗證者,我也無能爲力。
任何人都可以發光嗎?
我注意到幾個MDN陣列方法的墊片,如this one第7行,使得它們可使用以下語法:Object(這個)做什麼?
var t = Object(this);
凡this
是一個數組。這不僅暗示我的驗證者,我也無能爲力。
任何人都可以發光嗎?
據我所知,只有當它將字符串文字傳遞給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
的實例。
它不適用於任何布爾值,數字,空值或未定義的值 - 基本上每個原始值。 – Bergi
@Bergi - 我不完全確定該代碼的原因是什麼......它不在[現在位於MDN上]的polyfill中(https://developer.mozilla.org/en-US/docs/Web/JavaScript /參考/ Global_Objects /陣列/的indexOf#填充工具)。我隱約記得爲這個答案研究它,但是那顯然是前一陣子。 –
是的,[MDN是一個wiki](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf$history?limit=all)。 – Bergi
是不是像C++中的複製構造函數? – 2012-10-31 09:11:13
[forEach的官方實現中的「var t = Object(this)」的重點是什麼?](http://stackoverflow.com/questions/6498487/whats-the-point-of-var-t -objectthis-the-official-implementation-of-for) – finnw