Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
请帮助我在Javascript中调试关于for/in的此错误_Javascript - Fatal编程技术网

请帮助我在Javascript中调试关于for/in的此错误

请帮助我在Javascript中调试关于for/in的此错误,javascript,Javascript,我正在学习javascript basic,我对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; }

我正在学习javascript basic,我对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函数,该函数计算数组中的值之和。在reduce2中,我使用for/of,它返回正确的结果

for(var value of this) {
    sum = callback(sum, value);
}
for(var i in this) {
    sum = callback(sum, this[i]);
}
但是,当我使用for/in时,它返回不正确的结果

for(var value of this) {
    sum = callback(sum, value);
}
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
时,值
i
将是
reduce2
因此
此[i]
指的是
reduce2
函数。在中为…使用
时,可以看到以下代码段的输出

var课程=[1,2,3,4];
Array.prototype.reduce2=函数(回调,initialValue){
var总和=初始值;
for(本节中的var i){
log(`this[${i}]:${this[i]}`);
sum=回调(sum,this[i]);
}
回报金额;
}
函数func(总数、数量){
返回总数+个数;
}

var sum=课程。减少2(func,0)
中的..不通过索引。正如@nithish所提到的,它将迭代属性。
最好使用classic
for循环
来迭代索引并获得数组项所需的行为

var课程=[1,2,3,4];
Array.prototype.reduce2=函数(回调,initialValue){
var总和=初始值;
for(var i=0;i控制台日志(总和)
for in
迭代索引,
for of
迭代值。
函数中的此
指的是函数,这是您想要的吗?
for..in
用于迭代对象属性,
for…of
用于迭代数组值。
在函数中,我想引用使用此函数的数组