के अंदर काम नहीं करता है मैं जावास्क्रिप्ट के साथ काम कर रहा एक सी/सी ++/जावा प्रोग्रामर हूं।जावास्क्रिप्ट 'डिलीट' पुनरावृत्ति लूप
मैं एक ऐसा फ़ंक्शन लिखने की कोशिश कर रहा हूं जो ऑब्जेक्ट 'obj' के सभी गुणों को हटा देगा। मैंने "How to quickly clear a Javascript Object?" पर पोस्टिंग पढ़ी है और देखा है कि दो जवाब हैं: (1) एक नया 'ओबीजे' बनाना (जो मैं नहीं करना चाहता क्योंकि मेरा कोड एक मोबाइल ब्राउज़र में चल रहा एक उच्च प्रदर्शन प्रोग्राम है , और मैं कचरा संग्रह को कम करना चाहता हूं); और (2) एक लूप में किसी ऑब्जेक्ट के गुणों पर पुनरावृत्ति और गुणों को हटाने। यह बाद दृष्टिकोण क्रोम 12. में काम नहीं करता
पर विचार करें निम्नलिखित कोड:
var foo = {};
foo['baz'] = 'bar';
console.log("1. foo.baz = " + foo.baz);
delete foo.baz;
console.log("2. foo.baz = " + foo.baz);
foo['baz'] = 'bar';
console.log("3. foo.baz = " + foo.baz);
for (prop in foo)
{
if (foo.hasOwnProperty(prop))
{
console.log("deleting property " + prop);
delete foo.prop;
}
}
console.log("4. foo.baz = " + foo.baz);
यह क्रोम 12 पर मेरे कंसोल में निम्न परिणाम पैदा करता है:
1. foo.baz = bar
2. foo.baz = undefined
3. foo.baz = bar
deleting property baz
4. foo.baz = bar
क्यों नहीं करता है foo.baz लूप के अंदर हटा दिया जाता है?
(1) मैं इस धारणा के तहत था कि संपत्ति नोटेशन foo.prop और foo [prop] समकक्ष थे, उदाहरण के लिए http://www.jibbering.com/faq/faq_notes/square_brackets.html में उल्लिखित है। (2) मेरे उदाहरण में "foo.baz हटाएं" क्यों काम करता है? (3) जैसा कि मैंने उल्लेख किया है, मैं कचरा संग्रह को कम करना चाहता हूं क्योंकि मैं मोबाइल ब्राउज़र पर काम कर रहा हूं। – stackoverflowuser2010
'foo.prop' 'foo [" prop "]' के बराबर है। फर्क देखें? यदि आप गतिशील रूप से 'foo' से संपत्ति खींचना चाहते हैं, तो आपको' foo [prop] 'का उपयोग करने की आवश्यकता है। – digitalbath
@ stackoverflowuser2010: मैं जीसी में कुछ और विश्वास रखूंगा। यदि आप प्रत्येक क्लिक पर ऑब्जेक्ट्स का टन नहीं बनाते हैं, तो आपको ठीक होना चाहिए। स्पष्ट रूप से सभी गुणों को हटाकर और फिर नए जोड़ना एक नया निर्माण करने और पुराने को जीसी में छोड़ने से काफी लंबा समय ले सकता है! – delnan