cari

Rumah  >  Soal Jawab  >  teks badan

Perbezaan antara peruntukan dan membongkar tatasusunan

<p>Jadi saya mempunyai kod JavaScript ini, apakah perbezaan antara Talian A dan Talian B</p> <pre class="brush:php;toolbar:false;">const arr1 = [1,2,3,4,5] const arr2 = [...arr1]; // Baris A const arr2 = arr1; // Baris B</pre> <p>Jadi saya ingin tahu sama ada kedua-dua kaedah tugasan ini adalah sama atau terdapat beberapa perbezaan</p>
P粉287254588P粉287254588478 hari yang lalu452

membalas semua(1)saya akan balas

  • P粉187160883

    P粉1871608832023-08-14 11:43:19

    Mereka berbeza.

    const arr2 = [...arr1]; // Line A
    

    LINE A, salin (salinan cetek) setiap elemen tatasusunan ke dalam arr2.

    const arr2 = arr1;      // Line B
    

    LINE B, tetapkan rujukan arr1 kepada arr1的引用赋值给arr2。基本上,arr1arr2. Pada asasnya, arr1 dan

    ialah tatasusunan yang sama.

    Contoh

    const arr = [1, 2, 3];
    
    const arrA = [...arr];
    const arrB = arr;
    
    console.log(arr === arrA); // False
    console.log(arr === arrB); // True
    
    arrA[0] = 9;
    console.log(arr[0] === arrA[0]); // False
    console.log(arr); // [1,2,3]
    console.log(arrA); // [9,2,3]
    
    arrB[0] = 9;
    console.log(arr[0] === arrB[0]); // True
    console.log(arr); // [9,2,3]
    console.log(arrB); // [9,2,3]
    

    Salinan cetek

    Salinan cetek hanya menyalin item peringkat pertama. Sebagai contoh, jika tatasusunan mengandungi tatasusunan lain, tatasusunan dalam akan disalin, tetapi unsur tatasusunan dalam tidak disalin. Oleh itu, elemen dalam tidak disalin. Lihat contoh kod di bawah: 🎜
    const arr = [1, 2, [5, 6]];
    
    const arrA = [...arr];
    const arrB = arr;
    
    console.log(arr === arrA); // False
    console.log(arr === arrB); // True
    
    arrA[0] = 8;
    arrA[2][0] = 9;
    console.log(arr[2][0] === arrA[2][0]); // True
    console.log(arr); // [1, 2, [9, 6]]
    console.log(arrA); // [8, 2, [9, 6]]
    
    arrB[0] = 8;
    arrB[2][0] = 9;
    console.log(arr[2][0] === arrB[2][0]); // True
    console.log(arr); // [8, 2, [9, 6]]
    console.log(arrB); // [8, 2, [9, 6]]
    

    balas
    0
  • Batalbalas