jfriend00 здесь на высоте, но одно маленькое уточнение: это не значит, что вы не можете изменить то, на что указывает ваша переменная. То есть y
изначально ссылается на некоторую переменную, которую вы поместили в массив, но затем вы можете взять переменную с именем y
, отсоединить ее от объекта, который сейчас находится в массиве, и подключить y
(то есть сделать это ссылка ) что-то совершенно другое без изменения объекта, на который теперь ссылается только массив .
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.