javascript - जावास्क्रिप्ट गहरी या उथली प्रतिलिपि में ऑब्जेक्ट को सरणी में धक्का दें?




arrays push (2)

jfriend00 यहां चिह्न पर सही है, लेकिन एक छोटी स्पष्टीकरण: इसका मतलब यह नहीं है कि आप बदल सकते हैं कि आपका चर क्या इंगित कर रहा है। यही है, 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.

सुंदर आत्म स्पष्ट प्रश्न ... जावास्क्रिप्ट में किसी सरणी पर .push () का उपयोग करते समय, वस्तु को प्रकार के बावजूद एक सूचक (उथला) या वास्तविक वस्तु (गहरी) सरणी में धक्का दिया जाता है।


यह आपके द्वारा दबाए जा रहे कार्यों पर निर्भर करता है। वस्तुओं और सरणी को मूल वस्तु के सूचक के रूप में धक्का दिया जाता है। बिल्ट-इन आदिम प्रकार जैसे संख्या या बूलियन को प्रतिलिपि के रूप में धक्का दिया जाता है। इसलिए, चूंकि ऑब्जेक्ट्स को किसी भी तरह से कॉपी नहीं किया गया है, इसलिए उनके लिए कोई गहरी या उथली प्रतिलिपि नहीं है।

यहां एक काम करने वाला स्निपेट है जो इसे दिखाता है:

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






push