¿El uso de forEach en JavaScript cambiará la matriz original?

Respuesta: Si el valor en la matriz es de tipo básico, no se puede cambiar, si es de tipo de referencia, hay dos situaciones: 1. El valor de dirección del elemento de parámetro formal no se modifica, solo algunos atributos dentro del Se modifica el elemento de parámetro formal, lo que cambiará la matriz original 2. Al modificar directamente todo el objeto del elemento, la matriz original no se puede cambiar;

JavaScript se divide en         tipos de datos básicos y tipos de datos de referencia . Para tipos de datos básicos: número, cadena, booleano, nulo, indefinido, almacenan variables y valores directamente en la memoria de pila. Los datos reales del objeto Object se almacenan en la memoria del montón. La pila solo almacena las variables del objeto y la dirección del montón correspondiente, por lo que operar el Objeto es en realidad operar directamente el objeto de matriz original.

1. Los valores de la matriz son tipos básicos.

La matriz contiene el tipo de datos básico a. Cuando se usa forEach, el parámetro formal b copiará el puntero y el valor de la matriz original en la pila. En este momento, a y b son datos completamente independientes. Estamos modificando el valor de b. No afectará el valor de a.

let array = [1, 2, 3, 4];
array.forEach(item => {
item = item * 2
})
console.log(array); // [1,2,3,4]

2. Los valores de la matriz son tipos de referencia.

La matriz contiene el tipo de datos de referencia a, por lo que cuando se usa forEach, el parámetro formal b copia la dirección del tipo de datos de referencia en la pila. En este momento, tanto a como b apuntan a la dirección guardada en el montón cuando a se creó por primera vez. definido.datos, por lo que cuando modificamos los datos de b, el valor de a también cambiará, porque ambos apuntan a los mismos datos en el montón.
(Tipo de datos básico: los punteros y los valores se almacenan en la pila; tipos de datos de referencia: los punteros se almacenan en la pila y los valores se almacenan en el montón)

1. Los elementos de la matriz son tipos de datos de referencia: (al modificar directamente todo el objeto del elemento, la matriz original no se puede cambiar)

let array = [
    { name: '张三', age: 10 },
    { name: '李四', age: 20 },
];
 
array.forEach((item) => {
    item = {
        name: '王五',
        age: '29',
    };
});
console.log(array ); 
 
// 打印结果:[{"name": "张三","age": 10},{"name": "李四","age": 10}]

2. Los elementos de la matriz son tipos de datos de referencia: (al modificar un atributo en el objeto elemento, se puede cambiar la matriz original)

let arr= [
    { name: '张三', age: 10 },
    { name: '李四', age: 20 },
];
 
arr.forEach((item) => {
    item.name = '王五';
});
console.log(arr);
// 打印结果:[{"name":"王五","age":18},{"name":"王五","age":20}]

Cómo cambiar el valor de tipo básico en la matriz original: 


Puede cambiar la matriz con la ayuda del índice del segundo parámetro.

let array = [1, 2, 3, 4];
array.forEach((item,index) => {
array[index] = item * 2
})
console.log(array); // [1,2,3,4]

Supongo que te gusta

Origin blog.csdn.net/qq_21473443/article/details/131759713
Recomendado
Clasificación