Do objects pushed into an array in javascript deep or shallow copy?

后端 未结 2 1249
一个人的身影
一个人的身影 2020-11-27 13:02

Pretty self evident question...When using .push() on an array in javascript, is the object pushed into the array a pointer (shallow) or the actual object (deep) regardle

2条回答
  •  生来不讨喜
    2020-11-27 13:52

    It depends upon what you're pushing. Objects and arrays are pushed as a pointer to the original object . Built-in primitive types like numbers or booleans are pushed as a copy. So, since objects are not copied in any way, there's no deep or shallow copy for them.

    Here's a working snippet that shows it:

    var array = [];
    var x = 4;
    let y = {name: "test", type: "data", data: "2-27-2009"};
    
    // primitive value pushes a copy of the value 4
    array.push(x);                // push value of 4
    x = 5;                        // change x to 5
    console.log(array[0]);        // array still contains 4 because it's a copy
    
    // object reference pushes a reference
    array.push(y);                // put object y reference into the array
    y.name = "foo";               // change y.name property
    console.log(array[1].name);   // logs changed value "foo" because it's a reference    
    
    // object reference pushes a reference but object can still be referred to even though original variable is no longer within scope
    if (true) {
        let z = {name: "test", type: "data", data: "2-28-2019"};
        array.push(z);
    }
    
    console.log(array[2].name);   // log shows value "test" since the pointer reference via the array is still within scope
    

提交回复
热议问题