先说结论:
什么意思?
一、改变数组本身的元素:
就是我们只有通过索引index才可以改变原数组中元素的值,通过item是改变不了远数组的值的。
比如:
const list = [
{
name: 'a', count: 1},
2,
function fn() {
console.log(3);
},
[4,4,4,4],
new Date()
]
for (let i = 0; i < list.length; i ++) {
list[i] = 4
}
console.log(list) // [ 4, 4, 4, 4, 4 ] 可以改变原数组的值
若用item:
list.map(item => {
item = 4
})
console.log(list)
// 还是原来的值:
[
{
name: 'a', count: 1 },
2,
[Function: fn],
[ 4, 4, 4, 4 ],
2022-12-04T22:59:34.743Z
]
二、改变元素的属性值:
list.forEach(item => {
item.count = 3
})
结果如下:
[
{
name: 'a', count: 3 },
2,
[Function: fn] {
count: 3 },
[ 4, 4, 4, 4, count: 3 ],
2022-12-04T23:01:58.986Z {
count: 3 }
]
总结如下:
-
基础类型的,依旧没有发生改变。
-
引用类型的变量,如果自身带了count属性,该属性就会被修改;如果不带该属性,就会添加count属性。
这里主要是值类型和引用类型的区别:
对item进行操作,其实是对iterator.next() 指向的对象,也就是 iterator.next().value 进行了操作。
如果原来的值是引用类型。操作的时候当然可以改变原来的item;
如果原来的值是基础类型,分别指向了一个基础类型的值。操作的时候不会改变原来的item;
文章参考地址:
原文地址