2016-03-01 58 views
0

MDN polyfill的Array.prototype.forEach()爲什麼在Array.prototype.forEach()中檢查null?

// Production steps of ECMA-262, Edition 5, 15.4.4.18 
// Reference: http://es5.github.io/#x15.4.4.18 
if (!Array.prototype.forEach) { 

    Array.prototype.forEach = function(callback, thisArg) { 

    var T, k; 

    if (this == null) { 
     throw new TypeError(' this is null or not defined'); 
    } 

    // 1. Let O be the result of calling toObject() passing the 
    // |this| value as the argument. 
    var O = Object(this); 

    // 2. Let lenValue be the result of calling the Get() internal 
    // method of O with the argument "length". 
    // 3. Let len be toUint32(lenValue). 
    var len = O.length >>> 0; 

我無法想象一種情況,this == null會發生。你可以給我一個例子嗎?謝謝。

+1

你需要共享的問題的代碼在JavaScript中傳遞自定義值this ..代碼片段 –

+0

的pollyfill的不是圖像試圖逐步實施規範。 * ToObject *沒有確切的等價物,如果通過* Null *或* undefined *,應該拋出TypeError。最接近的是調用* Object(this)*,如果傳遞它不會以相同的方式運行* Null *或* undefined *所以測試在那裏在算法的第1步拋出正確的錯誤。步驟1的評論應該在* this == null * test之前。無論如何,我認爲這是錯誤的,因爲如果* this *是'0',那麼測試將會失敗,但不應該。 – RobG

+0

該方法是_generic_,因此必須對輸入進行額外的小心處理。例如:'[] .map.call(「123」,Number)' – dandavis

回答

相關問題