किसी भी भाषा में ऑब्जेक्ट्स कॉपी करने के 2 तरीके हैं: डीप कॉपी और शैलो कॉपी।
शैलो कॉपी और डीप कॉपी भाषा-अज्ञेय हैं। शैलो कॉपीज जितना संभव हो उतना कम डुप्लीकेट करती हैं। एक कलेक्शन की शैलो कॉपी कलेक्शन स्ट्रक्चर की कॉपी है, एलिमेंट्स की नहीं। शैलो कॉपी के साथ, दो कलेक्शन अब व्यक्तिगत एलिमेंट्स साझा करते हैं।
उदाहरण
let innerObj = { a: 'b', c: 'd' } let obj = { x: "test", y: innerObj } // शैलो कॉपी बनाएं। let copyObj = Object.assign({}, obj); // copyObj और obj दोनों का प्रॉप y अब उसी innerObj को रेफर करता है। इसमें कोई भी परिवर्तन प्रतिबिंबित होगा। innerObj.a = "test" console.log(obj) console.log(copyObj)
आउटपुट
यह आउटपुट देगा:
{ x: 'test', y: { a: 'test', c: 'd' } } { x: 'test', y: { a: 'test', c: 'd' } }
ध्यान दें कि शैलो कॉपीज रिकर्सिवली क्लोन नहीं करतीं। यह केवल टॉप लेवल पर करता है।
डीप कॉपीज सब कुछ डुप्लीकेट करती हैं। एक कलेक्शन की डीप कॉपी मूल कलेक्शन में सभी एलिमेंट्स के क्लोन के साथ दो कलेक्शन होती है।
उदाहरण
let innerObj = { a: 'b', c: 'd' } let obj = { x: "test", y: innerObj } // डीप कॉपी बनाएं। let copyObj = JSON.parse(JSON.stringify(obj)) // copyObj और obj दोनों का प्रॉप y अब उसी innerObj को रेफर करता है। इसमें कोई भी परिवर्तन प्रतिबिंबित होगा। innerObj.a = "test" console.log(obj) console.log(copyObj)
आउटपुट
यह आउटपुट देगा:
{ x: 'test', y: { a: 'test', c: 'd' } } { x: 'test', y: { a: 'b', c: 'd' } }