javascript - forEach über das JS-Array kann den Wert des Array-Elements nicht ändern
天蓬老师
天蓬老师 2017-05-24 11:35:57
0
1
635
// 第一种(数组forEach无法修改数组元素的值)
let testArr = [1, true, [], '4', {a: 1}];
testArr.forEach((value, index, arr) => {
    value = 6;
    // arr[index] = 6; 此处可以修改成功[6, 6, 6, 6, 6];
});
console.log(testArr); // 输出[1, true, [], '4', {a: 1}]

// 第二种(数组forEach能修改数组元素的属性值)
let objArr = [{a: 1}, {a: 2}, {a: 3}];
objArr.forEach((value, index, arr) => {
    value.a = 6;
});
console.log(objArr); // 输出[{a: 6}, {a: 6}, {a: 6}];

// 第三种(自己实现一个类似forEach的方法)
Array.prototype._forEach = function(callback, _this) {
    if (!_this) _this = this; 
    for (let key in _this) {
        callback.call(_this, _this[key], key, _this);
    }
}
// 调用方法时发现结果一样
// 顺便提问为什么不能写[1,2,3]只能写new Array(1, 2, 3),会报错
let newArr = new Array(1, 2, 3);
newArr._forEach((value, index, arr) => {
    value = 4;
});
console.log(newArr);

希望各位有空帮我解答一下,谢谢~
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

Antworte allen(1)
曾经蜡笔没有小新

请搜索:js方法参数传递方式。参数是按值传递的,也就是说基本类型是拷贝了一份值,引用类型是吧引用拷贝下来传递进去。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage