Oldukça anlaşılır bir soru ... Javascript içindeki bir dizide .push() kullanılırken nesne, bir işaretçi (sığ) veya gerçek nesne (derin) türünden bağımsız olarak türüne itilir.Nesne javascript derin veya sığ kopyaya itti?
cevap
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
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.
- 1. Scala AnyRef.clone, sığ veya derin bir kopya yapıyor mu?
- 2. Hard Copy vs Sığ kopya javascript
- 3. Sığ bir kopya ile JavaScript dizileri içeren derin bir kopya arasındaki fark nedir?
- 4. JavaScript'te derin bir nesne yavaş mıdır? Eğer öyleyse ne kadar
- 5. javascript, ben nesnelere veya nesne prototip
- 6. İki kopyaya dönüş değeri
- 7. Sığ nesne nesnesini ES6/ES7 içinde bir veya daha fazla özelliği mi bırakıyorsunuz?
- 8. JavaScript - nesne
- 9. PHP derin klon nesnesi
- 10. Javascript Şablonları - Derin iç içe mümkün mü
- 11. pandas dataframe, kopyaya göre değer
- 12. Kullanıcı-kopyasını hala kopyaya kopyala
- 13. Nesne
- 14. JavaScript nesne oluşturma
- 15. JavaScript - Nesne hazırlamasının avantajları
- 16. Javascript nesne niteliklerinin kopyalanması
- 17. Javascript değişken nesne tuşları
- 18. İşlevsel Veri Türü nedir: işlev veya nesne? JavaScript
- 19. IE11 - Nesne özelliği veya yöntemi desteklemiyor 'içerir' - javascript window.location.hash
- 20. Karmaşık Üçüncü Şahıs Nesneleri/Sınıfları'nın Derin Kopyası
- 21. nodejs farklarla derin eşit
- 22. IE 8: Nesne özelliği veya yöntemi 'getElementsByClassName'
- 23. Nesne sınıfını dize adından javascript
- 24. javascript eval ve nesne değerlendirmesi
- 25. JavaScript kapsamları ve nesne yönelimi
- 26. Javascript Varsayılan değer olan nesne
- 27. Javascript sınıfı yapılandırılmış nesne tanımlanmamış
- 28. JavaScript nesne içgözlemesi nasıl yapılır?
- 29. İki nesne sabit olarak javascript
- 30. JavaScript: TypeError: halkalı nesne değeri
ilginç nokta. –
Downvote açıklaması? Ne olduğunu bilmeme izin vermezsen sorunu çözmek zor. – ruffin
Neden ping ping? Bunu uzun zaman önce reddettim ve cevabını beğendim. İşte bir oylama ekranı: http://i.imgur.com/AnDt98c.png –