簡體   English   中英

請幫我在 Javascript 中調試有關 for/in 的此錯誤

[英]Please help me debug this error about for/in in Javascript

我正在學習 javascript 基本知識,但我對 for/in 和 for/of 有疑問。

var courses = [1, 2, 3, 4];

Array.prototype.reduce2 = function (callback, initialValue) {
    var sum = initialValue;
    for(var value of this) {
        sum = callback(sum, value);
    }
    return sum;
}

function func(total, number) {
    return total + number;
}

var sum = courses.reduce2(func, 0);
console.log(sum);

該程序用於定義reduce2 function,它計算數組中值的總和。 在 reduce2 中,我使用 for/of 並返回正確的結果。

for(var value of this) {
    sum = callback(sum, value);
}

但是,當我使用 for/in 時,它會返回不正確的結果。

for(var i in this) {
    sum = callback(sum, this[i]);
}

這就是結果。

 10function (callback, initialValue) {
    var sum = initialValue;
    for(var i in this) {
        sum = callback(sum, this[i]);
    }
    return sum;
  }

請幫幫我,萬分感謝!!!

for...in文檔

for...in 語句遍歷 object 的所有可枚舉屬性

因此,在您的情況下,當在數組值的末尾使用for...in時, i將是reduce2 ,所以this[i]指的是reduce2 function。 使用for...in時,您可以看到以下代碼段的 output 。

 var courses = [1, 2, 3, 4]; Array.prototype.reduce2 = function(callback, initialValue) { var sum = initialValue; for (var i in this) { console.log(`this[${i}]: ${this[i]}`); sum = callback(sum, this[i]); } return sum; } function func(total, number) { return total + number; } var sum = courses.reduce2(func, 0);

因為, this[i]被傳遞給回調 function,它被附加到最終的 output 即,function 在這種情況下聲明本身被附加到10

為了避免在使用for...in這種情況,我們可以利用hasOwnProperty並獲得所需的 output。

 var courses = [1, 2, 3, 4]; Array.prototype.reduce2 = function (callback, initialValue) { var sum = initialValue; for(var i in this) { if(this.hasOwnProperty(i)){ sum = callback(sum, this[i]); } } return sum; } function func(total, number) { return total + number; } var sum = courses.reduce2(func, 0); console.log(sum);

for..in不是 go 通過索引。 正如@nithish 提到的,它將迭代屬性。 最好使用經典for loop來迭代索引並獲得數組項的所需行為。

 var courses = [1, 2, 3, 4]; Array.prototype.reduce2 = function (callback, initialValue) { var sum = initialValue; for (var i = 0; i < this.length; i++) { sum = callback(sum, this[i]); } return sum; }; function func(total, number) { return total + number; } var sum = courses.reduce2(func, 0); console.log(sum);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM