请帮助我在Javascript中调试关于for/in的此错误
我正在学习javascript basic,我对for/in和for/of有问题请帮助我在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; }
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所提到的,它将迭代属性。
最好使用classicfor循环
来迭代索引并获得数组项所需的行为
var课程=[1,2,3,4];
Array.prototype.reduce2=函数(回调,initialValue){
var总和=初始值;
for(var i=0;i 控制台日志(总和)
for in
迭代索引,for of
迭代值。函数中的此
指的是函数,这是您想要的吗?for..in
用于迭代对象属性,for…of
用于迭代数组值。此
在函数中,我想引用使用此函数的数组