पृष्ठभूमिक्या मैं वस्तुओं के असाइनमेंट को नष्ट करने के लिए चर घोषित कर सकता हूं?
जब मैं सरणियों मैं करने में सक्षम था के साथ काम करने की कोशिश की destructuring मेरी चर पूर्व घोषित:
let a, b, c;
let arr = [1, 2, 3, 4, 5];
[a, b, c] = arr;
console.log(a) // logs 1
console.log(b) // logs 2
console.log(c) // logs 3
इस कोलाहल संकलक ठीक से गुजरना पड़ा।
हालांकि जब मैं वस्तुओं के साथ भी ऐसा ही करने की कोशिश की मैं एक त्रुटि
let a, b, c
let obj = {cat: 'meow', dog: 'woof', mouse: 'squeak'};
{cat: a, dog: b, mouse: c} = obj;
console.log(a) // I want this to log 'meow'
console.log(b) // I want this to log 'woof'
console.log(c) // I want this to log 'squeak'
प्रश्न
यह एक ES6 या कोलाहल मोड़/समस्या है मिल गया? यदि यह ES6 के लिए जानबूझकर है, तो सरणी के तरीके से अंतर क्यों माना जाता है?
नोट
मैं समझता हूँ let
साथ var
की जगह का मतलब है कि मैं अपने चर पूर्व घोषित करने के लिए आवश्यक है और let
इनलाइन होने मान्य है (और मुझे विश्वास है, आम तौर पर पसंद) है कि नहीं कर रहा हूँ। मैं "इसे बिल्कुल ऐसा न करें" उत्तर के बजाय कार्यान्वयन के बीच के अंतर के बारे में जानना चाहता हूं।
क्या आप भी इस के साथ पूरा करने के लिए कोशिश कर रहे हैं एक ही लिख सकते हैं: '{ बिल्ली: ए, कुत्ता: बी, माउस: सी} = ओबीजे; '? आपके पास 'obj' में पूरी तरह से बनाई गई वस्तु है। यदि आप इसे किसी अन्य ऑब्जेक्ट पर कॉपी करना चाहते हैं, तो आप 'ऑब्जेक्ट.साइन() 'का उपयोग करें। – jfriend00
@ jfriend00 मैं सीख रहा हूं कि असाइनमेंट कैसे काम करता है - उदाहरण पूरी तरह से सीखने के उद्देश्यों के लिए हैं। लेकिन सामान्य उद्देश्य एक नई वस्तु बनाने के बजाय 'ए', 'बी',' सी' को मान असाइन करना होगा। प्रतिलिपि बनाना प्रतिलिपि के बजाय * टूटना चाहिए *। –
फिर, आप केवल एक सामान्य घोषणा का उपयोग कर सकते हैं: 'myObj = {cat: a, dog: b, mouse: c}; '। आपको इसके लिए विनाश की आवश्यकता नहीं है। यदि आप अपने पहले से मौजूद ऑब्जेक्ट में गुणों को 'ए',' बी' और 'सी' के मानों से असाइन करना चाहते हैं, तो आपको उन्हें मैन्युअल रूप से 'obj.cat = a;' असाइन करना होगा। – jfriend00