Ändert die Verwendung von forEach in JavaScript das ursprüngliche Array?

Antwort: Wenn der Wert im Array ein Basistyp ist, kann er nicht geändert werden. Wenn es sich um einen Referenztyp handelt, gibt es zwei Situationen: 1. Der Adresswert des formalen Parameterelements wird nicht geändert, sondern nur einige Attribute innerhalb des Arrays Formale Parameterelemente werden geändert, wodurch das ursprüngliche Array geändert wird. 2. Wenn das gesamte Elementobjekt direkt geändert wird, kann das ursprüngliche Array nicht geändert werden.

        JavaScript ist in Basisdatentypen und Referenzdatentypen unterteilt . Für grundlegende Datentypen: Zahl, Zeichenfolge, Boolescher Wert, Null, undefiniert speichern sie Variablen und Werte direkt im Stapelspeicher. Die realen Daten des Objektobjekts werden im Heap-Speicher gespeichert. Der Stapel speichert nur die Variablen des Objekts und die entsprechende Heap-Adresse. Daher ist die Bedienung des Objekts tatsächlich eine direkte Bedienung des ursprünglichen Array-Objekts selbst.

1. Die Werte im Array sind Grundtypen

Das Array enthält den Basisdatentyp a. Bei Verwendung von forEach kopiert der formale Parameter b den Zeiger und den Wert des ursprünglichen Arrays auf den Stapel. Zu diesem Zeitpunkt sind a und b völlig unabhängige Daten. Wir ändern den Wert von b . Es hat keinen Einfluss auf den Wert von a.

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

2. Die Werte im Array sind Referenztypen

Das Array enthält den Referenzdatentyp a. Wenn Sie also forEach verwenden, kopiert der formale Parameter b die Adresse des Referenzdatentyps auf den Stapel. Zu diesem Zeitpunkt verweisen sowohl a als auch b auf die Adresse, die im Heap gespeichert wurde, als a zuerst war definiert. Daten. Wenn wir also die Daten von b ändern, ändert sich auch der Wert von a, da beide auf dieselben Daten im Heap verweisen.
(Grundlegender Datentyp: Zeiger und Werte werden im Stapel gespeichert; Referenzdatentypen: Zeiger werden im Stapel und Werte im Heap gespeichert.)

1. Die Elemente des Arrays sind Referenzdatentypen: (Beim direkten Ändern des gesamten Elementobjekts kann das ursprüngliche Array nicht geändert werden.)

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. Die Elemente des Arrays sind Referenzdatentypen: (Beim Ändern eines Attributs im Elementobjekt kann das ursprüngliche Array geändert werden.)

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

So ändern Sie den Basistypwert im ursprünglichen Array: 


Mit Hilfe des zweiten Parameterindex können Sie das Array ändern

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

Guess you like

Origin blog.csdn.net/qq_21473443/article/details/131759713