दिलचस्प पोस्ट
क्या यूट्यूब और मैप्स जैसे आईफोन एप्स के लिए एक एचटीएमएल + डोमेन-आधारित यूआरएल योजना पंजीकरण करना संभव है? एकाधिक सीमांकक पर आधारित स्ट्रिंग विभाजित करें सी # में स्ट्रिंग और टूस्ट्रिंग () विधि के लिए एक इंट को काटने के बीच अंतर क्या है वर्तमान कर्सर स्थिति प्राप्त करें नियमित गैर-व्यवस्थापक उपयोगकर्ताओं द्वारा आईओएस ऐप के माध्यम से फेसबुक फैन पेज पर फोटो पोस्ट करना मैं कैसे देखूं अगर वाई-फाई एंड्रॉइड पर कनेक्ट है? घटनाओं के लिए बाध्यकारी आदेश? स्थानीय चर की आवश्यकता क्यों होती है, लेकिन फ़ील्ड नहीं करते हैं? क्या मुझे कंट ऑब्जेक्ट के लिए उपयोगकर्ता द्वारा प्रदत्त कंस्ट्रक्टर को वास्तव में लागू करना है? जावास्क्रिप्ट में "जोर" क्या है? अपनी खुद की टिन्यूरल शैली यूआईडी बनाना किसी वेब पेज में सफ़ारी रीडर को कैसे अक्षम करें संग्रहीत कार्यविधि और पैरामीटर के साथ डेटाएडैप्टर का उपयोग कैसे करें क्या इस मोड को खोजने के लिए एक अंतर्निहित कार्य है? Web.config फ़ाइल में पुनर्निर्देशन सेट करना

जावास्क्रिप्ट में ऑब्जेक्ट हटाना

मैं थोड़ा जावास्क्रिप्ट delete ऑपरेटर के साथ भ्रमित हूँ। कोड का निम्न भाग लें:

 var obj = { helloText: "Hello World!" }; var foo = obj; delete obj; 

कोड के इस टुकड़े को निष्पादित करने के बाद, obj null , लेकिन foo अभी भी obj तरह एक वस्तु को संदर्भित करता है। मैं इस वस्तु का अनुमान लगा रहा हूं कि एक ही वस्तु है जिसे foo ने बताया।

यह मुझे भ्रमित करता है, क्योंकि मुझे उम्मीद थी कि obj ने obj को उस ऑब्जेक्ट को हटा दिया जो obj को स्मृति में इंगित कर रहा था, न कि केवल चर obj

ऐसा इसलिए है क्योंकि जावास्क्रिप्ट कूड़ा कलेक्टर एक बनाए रखने / रिलीज के आधार पर काम कर रहा है, इसलिए यदि मुझे ऑब्जेक्ट की ओर इशारा करते हुए कोई अन्य चर नहीं है, तो इसे स्मृति से हटा दिया जाएगा?

(वैसे, मेरा परीक्षण सफारी 4 में किया गया था।)

Solutions Collecting From Web of "जावास्क्रिप्ट में ऑब्जेक्ट हटाना"

डिलीट ऑपरेटर केवल एक संदर्भ को हटाता है, कभी भी एक ऑब्जेक्ट ही नहीं। यदि यह वस्तु स्वयं नष्ट कर दी है, तो अन्य शेष संदर्भ झूल रहे होंगे, जैसे कि C ++ हटाएं (और उनमें से एक तक पहुंचने से एक दुर्घटना होती है। इन्हें सभी बारी नल करने के लिए प्रत्येक ऑब्जेक्ट को हटाने या अतिरिक्त स्मृति के लिए अतिरिक्त काम करना होगा।)

चूंकि जावास्क्रिप्ट कचरा एकत्र है, आपको खुद को ऑब्जेक्ट्स हटाने की ज़रूरत नहीं है – जब उनको संदर्भ देने का कोई तरीका नहीं है, तब उन्हें हटा दिया जाएगा।

यदि आप उनके साथ समाप्त हो जाते हैं, तो किसी ऑब्जेक्ट के संदर्भ को हटाने के लिए उपयोगी हो सकता है, क्योंकि यह कचरा कलेक्टर को अधिक जानकारी देता है कि क्या पुनः प्राप्त किया जा सकता है। यदि सन्दर्भ एक बड़े ऑब्जेक्ट के लिए बने रहें, तो इसका कारण यह अनिवार्य नहीं हो सकता है – भले ही आपके प्रोग्राम का शेष वास्तव में उस ऑब्जेक्ट का उपयोग न करे

delete आदेश का नियमित चर पर कोई प्रभाव नहीं है, केवल गुण delete आदेश के बाद संपत्ति में मूल्य null नहीं है, यह बिल्कुल मौजूद नहीं है।

अगर संपत्ति एक ऑब्जेक्ट संदर्भ है, तो delete कमांड संपत्ति को हटा देती है लेकिन वस्तु नहीं है कचरा कलेक्टर वस्तु का ख्याल रखेगा यदि इसका इसके बारे में कोई अन्य संदर्भ नहीं है।

उदाहरण:

 var x = new Object(); xy = 42; alert(xy); // shows '42' delete x; // no effect alert(xy); // still shows '42' delete xy; // deletes the property alert(xy); // shows 'undefined' 

(फ़ायरफ़ॉक्स में परीक्षण किया गया।)

"वैरिएबल को घोषित रूप से घोषित किया गया" वैश्विक वस्तु के गुण हैं, इसलिए उन पर कार्य हटाएं जैसे कि यह किसी भी संपत्ति पर काम करता है। वेरिएबल के साथ घोषित वेरिएबल्स अविनाशी हैं

मोज़िला दस्तावेज़ीकरण से आ रहा है, "आप स्पष्ट रूप से घोषित चर को हटाने के लिए डिलीट ऑपरेटर का उपयोग कर सकते हैं, लेकिन वरु स्टेटमेंट के साथ घोषित नहीं किए गए हैं।"

यहां लिंक है: https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference : ऑपरेटर : विशिष्ट_ऑपरेटर्स : डिलीट_ऑपरेटर

@ गफ़ा के उत्तर पर आधारित मुझे निम्नलिखित विधि मेरे लिए काम करती है:

 var obj = { helloText: "Hello World!" }; obj = null; delete obj; 

Obj को पहले रद्द करने के लिए सेट करके, आपने इसे सभी संदर्भ हटा दिए हैं, फिर आप इसे पूरी तरह से हटा सकते हैं

मैंने अन्य ब्राउज़र पर इसका परीक्षण नहीं किया, लेकिन यह फोनगैप 1.7.0 में काम करता है

जावा स्क्रिप्ट में किसी ऑब्जेक्ट को हटाने के लिए इसका उपयोग नहीं किया जाता है

आपके मामले में किसी object key को हटाने के लिए इस्तेमाल किया जाता है

var obj = { helloText: "Hello World!" }; var foo = obj; delete obj;

ऑब्जेक्ट को हटाया नहीं गया है चेक ऑब्ज़ अभी भी वही वैल्यू लेते हैं।

delete obj.helloText

और फिर obj, foo जांचें, दोनों खाली वस्तु हैं

बस एक jsperf आप इस मामले के प्रकाश में दिलचस्प विचार कर सकते हैं पाया। (यह तस्वीर को पूरा करने के लिए इसे रखने के लिए आसान हो सकता है)

यह डिलीट की तुलना, रिक्त सेटिंग और अपरिभाषित सेट की तुलना करता है।

लेकिन ध्यान रखें कि जब आप कई बार संपत्ति को हटाना / सेट करते हैं तो यह मामले की जांच करता है

जीसी के प्रश्नों के अलावा, प्रदर्शन के लिए, ब्राउज़र को पृष्ठभूमि में – -> अनुकूलन के आधार पर विचार करना चाहिए

http://coding.smashingmagazine.com/2012/11/05/writing-fast-memory-efficient-javascript/

ऐसा प्रतीत होता है कि इसे हटाए जाने की तुलना में संदर्भ को निरर्थक करना बेहतर हो सकता है क्योंकि इससे पीछे के दृश्यों को बदल सकता है 'क्लास' का उपयोग करता है

आईई 5 से 8 में एक बग है, जहां मेजबान ऑब्जेक्ट (विंडो, ग्लोबल, डोम आदि) के गुणों पर डिलीट का इस्तेमाल होता है, प्रकार "त्रुटि ऑब्जेक्ट इस एक्शन का समर्थन नहीं करती"।

 var el=document.getElementById("anElementId"); el.foo = {bar:"baz"}; try{ delete el.foo; }catch(){ //alert("Curses, drats and double double damn!"); el.foo=undefined; // a work around } 

बाद में अगर आपको यह पता लगाने की आवश्यकता है कि संपत्ति का पूरा अर्थ कहाँ है, तो el.foo !== undefined क्योंकि "foo" in el हमेशा आईई में सही होगा।

यदि वास्तव में संपत्ति को वास्तव में गायब होने की ज़रूरत है …

 function hostProxy(host){ if(host===null || host===undefined) return host; if(!"_hostProxy" in host){ host._hostproxy={_host:host,prototype:host}; } return host._hostproxy; } var el=hostProxy(document.getElementById("anElementId")); el.foo = {bar:"baz"}; delete el.foo; // removing property if a non-host object 

यदि मेजबान एपीआई के साथ मेजबान वस्तु का उपयोग करने की आवश्यकता है …

 el.parent.removeChild(el._host); 

मैंने इस लेख के लिए इसी खोज के लिए मेरी खोज में ठोकर खाई। मैं क्या कर रहा हूं, मेरे ऑब्जेक्ट में obj.pop() सभी संग्रहीत मूल्य / ऑब्जेक्ट्स को पॉप आउट कर रहा है, इसलिए मैं ऑब्जेक्ट का पुन: उपयोग कर सकता हूं। निश्चित नहीं है कि यह बुरा व्यवहार है या नहीं यह तकनीक मेरे लिए क्रोम देव उपकरण या फ़ायरफ़ॉक्स वेब कंसोल में अपने कोड का परीक्षण करने के लिए आसान था।

एक चर को null सेट करना, सभी ब्राउज़रों में ऑब्जेक्ट्स के किसी भी संदर्भ को तोड़ने के लिए सुनिश्चित करता है जिसमें डोम तत्वों और जावास्क्रिप्ट स्कोप के बीच बनाए जाने वाले परिपत्र संदर्भ शामिल हैं। delete आदेश का उपयोग करके हम वस्तुओं को चिह्नित कर रहे हैं जो कचरा संग्रह के अगले रन पर साफ़ हो सकते हैं, लेकिन यदि एक ही ऑब्जेक्ट को संदर्भित करने वाले कई चर हैं, तो एक वैरिएबल हटाने से वस्तु को मुक्त नहीं किया जाएगा, यह केवल उस वैरिएबल के बीच के संबंध को हटा देगा और वस्तु और कचरा संग्रह के अगले रन पर, केवल चर साफ हो जाएगा।

यह मेरे लिए यह काम है, हालांकि यह एक अच्छा अभ्यास नहीं है यह केवल सभी संबद्ध तत्व को हटा देता है जिसके साथ वस्तु संबंधित होती है।

  for (element in homeService) { delete homeService[element];