something - ¿Los objetos se insertan en una matriz en javascript profunda o superficial?
replace array javascript (2)
Depende de lo que estés presionando. Los objetos y matrices se presionan como un puntero al objeto original. Los tipos primitivos integrados como números o booleanos se envían como una copia. Entonces, como los objetos no se copian de ninguna manera, no hay una copia profunda o superficial para ellos.
Aquí hay un fragmento de trabajo que lo muestra:
var array = [];
var x = 4;
var 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
Pregunta bastante evidente ... Al usar .push () en una matriz en javascript, el objeto insertado en la matriz es un puntero (poco profundo) o el objeto real (profundo) independientemente del tipo.
jfriend00 está justo al lado de aquí, pero una pequeña aclaración: eso no significa que no puedas cambiar a qué apunta tu variable. Es decir, y
inicialmente hace referencia a alguna variable que coloque en la matriz, pero luego puede tomar la variable llamada y
, desconectarla del objeto que está en la matriz ahora, y conectar y
(es decir, hacerla referencia ) algo completamente diferente sin cambiando el objeto al que ahora hace referencia la matriz .
http://jsfiddle.net/rufwork/5cNQr/6/
var array = [];
var x = 4;
var y = {name: "test", type: "data", data: "2-27-2009"};
// 1.) pushes a copy
array.push(x);
x = 5;
document.write(array[0] + "<br>"); // alerts 4 because it''s a copy
// 2.) pushes a reference
array.push(y);
y.name = "foo";
// 3.) Disconnects y and points it at a new object
y = {};
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.