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

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


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 4array.push(x);                // push value of 4x = 5;                        // change x to 5console.log(array[0]);        // array still contains 4 because it's a copy// object reference pushes a referencearray.push(y);                // put object y reference into the arrayy.name = "foo";               // change y.name propertyconsole.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 scopeif (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


jfriend00 is right on the mark here, but one small clarification: That doesn't mean you can't change what your variable is pointing to. That is, y initially references some variable that you put into the array, but you can then take the variable named y, disconnect it from the object that's in the array now, and connect y (ie, make it reference) something different entirely without changing the object that now is referenced only by the array.

http://jsfiddle.net/rufwork/5cNQr/6/

var array = [];var x = 4;var y = {name: "test", type: "data", data: "2-27-2009"};// 1.) pushes a copyarray.push(x);x = 5;document.write(array[0] + "<br>");    // alerts 4 because it's a copy// 2.) pushes a referencearray.push(y);y.name = "foo";// 3.) Disconnects y and points it at a new objecty = {}; y.name = 'bar';document.write(array[1].name + ' :: ' + y.name + "<br>");   // alerts "foo :: bar" because y was a reference, but then // the reference was moved to a new object while the // reference in the array stayed the same (referencing the // original object)// 4.) Uses y's original reference, stored in the array,// to access the old object.array[1].name = 'foobar';document.write(array[1].name + "<br>");// alerts "foobar" because you used the array to point to // the object that was initially in y.