JavaScript で forEach を使用すると、元の配列が変更されますか?

回答: 配列内の値が基本型の場合は変更できませんが、参照型の場合は次の 2 つの状況が考えられます: 1. 仮パラメータ要素のアドレス値は変更されず、配列内の一部の属性のみが変更されます。仮パラメータ要素が変更されると、元の配列が変更されます; 2. 要素オブジェクト全体を直接変更する場合、元の配列は変更できません。

        JavaScript は、基本データ型と参照データ型に分類されます。基本的なデータ型: 数値、文字列、ブール値、null、未定義の場合、変数と値はスタック メモリに直接保存されます。Object オブジェクトの実データはヒープ メモリに格納されます。スタックにはオブジェクトの変数と対応するヒープ アドレスのみが格納されるため、オブジェクトの操作は実際には元の配列オブジェクト自体を直接操作することになります。

1.配列内の値は基本型です

配列には基本データ型 a が含まれています。forEach を使用する場合、仮パラメータ b はスタック上の元の配列のポインタと値をコピーします。このとき、a と b は完全に独立したデータです。b の値を変更しています。 . a の値には影響しません。

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

2.配列内の値は参照型です

配列には参照データ型 a が含まれているため、forEach を使用する場合、仮パラメータ b はスタック上の参照データ型のアドレスをコピーします。このとき、a と b は両方とも a が最初にヒープに保存されたアドレスを指します。したがって、b のデータを変更すると、両方ともヒープ内の同じデータを指しているため、a の値も変更されます。
(基本データ型:ポインタと値がスタックに格納される、参照データ型:ポインタがスタックに格納され、値がヒープに格納される)

1. 配列の要素は参照データ型です: (要素オブジェクト全体を直接変更する場合、元の配列は変更できません)

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. 配列の要素は参照データ型です: (要素オブジェクトの属性を変更すると、元の配列が変更される可能性があります)

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

元の配列の基本型の値を変更する方法: 


2 番目のパラメーターのインデックスを使用して配列を変更できます。

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

おすすめ

転載: blog.csdn.net/qq_21473443/article/details/131759713