2011-12-28 20 views

cevap

100

Bu, ittiğiniz şeye bağlıdır. Nesneler ve diziler, orijinal nesneye bir işaretçi olarak itilir. Sayı veya boole gibi yerleşik ilkel türler bir kopya olarak itilir. Yani, nesneler herhangi bir şekilde kopyalanmadığından, onlar için derin veya sığ bir kopya yoktur. İşte

gösterir bir çalışma snippet'ine:

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

30

jfriend00 burada sağ işareti olmakla birlikte, bir küçük açıklama: Yani değiştiremezsiniz anlamına gelmez ne sizin değişkeni işaret ediyor. Yani y başlangıçta diziye koymak bazı değişkeni başvuran, ancak daha sonra y, y adlı değişkeni almak artık dizide var nesneden bağlantısını kesin ve bağlanabilir (yani yapmak o referans) Şimdi dizisiyle artık başvurulan nesneyi değiştirmeden tamamen farklı bir şey . `New` için "kesmek" nesne referans kullanımıyla ilgili

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. 
+0

ilginç nokta. –

+1

Downvote açıklaması? Ne olduğunu bilmeme izin vermezsen sorunu çözmek zor. – ruffin

+0

Neden ping ping? Bunu uzun zaman önce reddettim ve cevabını beğendim. İşte bir oylama ekranı: http://i.imgur.com/AnDt98c.png –

İlgili konular