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
會發生。你可以給我一個例子嗎?謝謝。
你需要共享的問題的代碼在JavaScript中傳遞自定義值
this
..代碼片段 –的pollyfill的不是圖像試圖逐步實施規範。 * ToObject *沒有確切的等價物,如果通過* Null *或* undefined *,應該拋出TypeError。最接近的是調用* Object(this)*,如果傳遞它不會以相同的方式運行* Null *或* undefined *所以測試在那裏在算法的第1步拋出正確的錯誤。步驟1的評論應該在* this == null * test之前。無論如何,我認爲這是錯誤的,因爲如果* this *是'0',那麼測試將會失敗,但不應該。 – RobG
該方法是_generic_,因此必須對輸入進行額外的小心處理。例如:'[] .map.call(「123」,Number)' – dandavis