हालांकि जो भी आपने पोस्ट किया है, आमतौर पर देखा जाता है, मैं व्यक्तिगत रूप से नहीं सोचता कि यह करने का सबसे अच्छा तरीका है। चर वास्तव में परिभाषित किया जा सकता है, लेकिन हो सकता है 0
या false
या कोई रिक्त स्ट्रिंग, और आप इस मूल्य की जगह खत्म हो सकता है -
MY_NAMESPACE
undefined
के अलावा अन्य कई कारणों से गलत पर मूल्यांकन कर सकता है।
MY_NAMESPACE
पहले से ही एक वस्तु जा रहा है के अलावा अन्य कई कारणों से सच का मूल्यांकन कर सकता है - यह एक गैर शून्य संख्या या true
या एक स्ट्रिंग हो सकता है, और यह, अपनी स्क्रिप्ट चुपचाप विफल हो जाएगा एक के गुणों को जोड़ रहा है क्योंकि बिना त्रुटि के आदिम असफल हो जाएगा।
वास्तव में, सबसे अच्छा तरीका आपके लक्ष्य पर निर्भर करता है। यदि आप एक मौजूदा चर/नामस्थान को दूषित नहीं करना चाहते हैं, तो आप एक typeof
जांच करते हैं और अगर चर पहले से ही परिभाषित किया गया है रोक नहीं बल्कि एक वस्तु चाहिए:
if (typeof MY_NAMESPACE == 'undefined') {
// create a new namespace
MY_NAMESPACE = {};
}
if (typeof MY_NAMESPACE == 'object') {
// go ahead
} else {
// MY_NAMESPACE was already defined, but it is not an object
// your script will fail if you continue, so do what you must and stop
}
यदि आपकी स्क्रिप्ट चाहिए काम करते हैं, बस आँख बंद करके किसी भी चेक के बिना नेमस्पेस बनाएं (बेशक, मैं यह सिफारिश नहीं कर रहा हूं कि आप ऐसा करते हैं)।
संपादित करें: (@ Jball की टिप्पणी के जवाब में, सोचा था कि मैं बस इसे यहां जोड़ा गया) इस नाम स्थान में एक पुस्तकालय है कि आप विकसित कर रहे हैं का हिस्सा है तो
, तो यह जरूरी है कि टकराव से बचने के लिए आप अपने नेमस्पेस को ध्यान से नाम दें। यदि आपको टकराव का सामना करना पड़ता है, तो अपनी लाइब्रेरी को किसी अन्य के साथ मिश्रित करने और अप्रत्याशित परिणाम प्राप्त करने से बस अपनी लाइब्रेरी लोड करना बंद करना बेहतर होता है।
यदि यह नामस्थान केवल आपके अपने आवेदन के लिए है, तो यह उस नाम को चुनने के लिए काफी सरल होना चाहिए जिसका उपयोग आप किसी भी पुस्तकालय द्वारा उपयोग नहीं कर रहे हैं।
"किसी अन्य क्षेत्र में लीक करने" का उदाहरण - 'window.MY_NAMESPACE = window.MY_NAMESPACE || {}; ' – jball