2008-09-18 10 views
25

मैं कैसे देख सकता हूं कि कोई निश्चित वस्तु लोड हो गई है, और यदि नहीं, तो इसे कैसे लोड किया जा सकता है, निम्न की तरह?जावास्क्रिप्ट में एक चर लोड होने पर कैसे जांचें?

if (!isObjectLoaded(someVar)) { 
    someVar= loadObject(); 
} 

उत्तर

37

यदि यह एक वस्तु है तो आप सिर्फ अगर यह null या undefined है देखने के लिए जाँच करें और फिर लोड यह अगर यह होता है करने के लिए सक्षम होना चाहिए।

if (myObject === null || myObject === undefined) { 
    myObject = loadObject(); 
} 

typeof समारोह का उपयोग करना भी एक विकल्प के रूप में यह प्रदान की वस्तु के प्रकार रिटर्न है। हालांकि, अगर ऑब्जेक्ट लोड नहीं किया गया है तो यह null or undefined लौटाएगा ताकि पठनीयता के संबंध में यह व्यक्तिगत वरीयता को थोड़ा सा उबाल सके।

+1

कोई परीक्षण नहीं है (myObject == null) (या अपरिभाषित) पर्याप्त है, क्योंकि यह सामान्य समानता का सटीक बिंदु है? या मुझे कुछ याद आ रहा है? – PhiLho

+0

@ फिलीहो - ऑब्जेक्ट प्रकार के आधार पर, ऑब्जेक्ट शून्य हो सकता है, या इसे अपरिभाषित किया जा सकता है। जावास्क्रिप्ट उन्हें दो अलग-अलग चीजों के रूप में व्यवहार करता है। – rjzii

+7

@Rob @PhiLho यह: 'x == null' इसके बराबर है:' x === null || x === अपरिभाषित '(इस शर्त के तहत कि वैश्विक चर' अपरिभाषित 'संशोधित नहीं किया गया है)। इसलिए, आपकी अभिव्यक्ति के बजाय आप केवल 'myObject == null' लिख सकते हैं। यह न केवल छोटे, बल्कि अधिक मजबूत है क्योंकि यह परिवर्तनीय 'अपरिभाषित' को असाइनमेंट के प्रति उदासीन है। –

1

typeof(obj) अन्य संभावित मान के बीच एक वर्ग का एक उद्देश्य के लिए "वस्तु" लौट आते हैं।

27
if(typeof(o) != 'object') o = loadObject(); 
+9

याद रखें कि टाइपफॉफ नल के लिए "ऑब्जेक्ट" देता है, तो शायद आपको कुछ ऐसा चाहिए [अगर (शून्य! == x && 'ऑब्जेक्ट' == टाइपोफ़ (x)) {] –

3

मुझे यकीन नहीं है कि "लोड" से आपका क्या मतलब है ... क्या चर object मौजूद है और बस आपके पास इच्छित प्रकार नहीं है? उस मामले में, आप की तरह कुछ चाहता हूँ:

function isObjectType(obj, type) { 
    return !!(obj && type && type.prototype && obj.constructor == type.prototype.constructor); 
} 

और फिर if (isObjectType(object, MyType)) { object = loadObject(); } का उपयोग करें।

तो object अपने परीक्षण से पहले कुछ भी साथ तैयार नहीं हुआ है (यानी - typeof object === 'undefined') तो आप बस की जरूरत है:

if ('undefined' === typeof object) { object = loadObject(); } 
3

आप शायद यदि किसी विशेष वस्तु परिभाषित किया गया है देखना चाहता हूँ

खास तौर पर अगर यह एक सेटटाइमआउट के साथ एक एसिंक्रोनस थ्रेड में किया जाता है जब यह चालू हो जाता है।

var generate = function() 
    { 
     window.foo = {}; 
    }; 
    var i = 0; 
    var detect = function() 
    { 
    if(typeof window.foo == "undefined") 
    { 
      alert("Created!"); 
      clearInterval(i); 
    } 
    }; 
    setTimeout(generate, 15000); 
    i = setInterval(detect, 100); 

सिद्धांत में पता होना चाहिए कि window.foo अस्तित्व में आता है।

2

आप एक कस्टम वस्तु का पता लगाने चाहते हैं:

// craete a custom object 
function MyObject(){ 

} 

// check if it's the right kind of object 
if(!(object instanceof MyObject)){ 
    object = new MyObject(); 
} 
3

उपयोग कर सकते हैं लोड से आप परिभाषित मतलब हैं, तो आप typeof साथ चर के प्रकार जांच कर सकते हैं समारोह। हालांकि typeof कुछ quirks है, और एक वस्तु, किसी सरणी, और एक अशक्त की पहचान करेगा एक वस्तु

alert(typeof(null)); 

एक अशक्त की पहचान के रूप में के रूप में एक परिभाषित वस्तु शायद विफल अपने कार्यक्रम का कारण होता है, तो जाँच

if(null !== x && 'object' == typeof(x)){ 
    alert("Hey, It's an object or an array; good enough!"); 
} 
1
if (!("someVar" in window)) { 
    someVar = loadObject(); 
} 

आपको बताएगा कि किसी भी जे एस पहले से वैश्विक संगठन करने के लिए सौंपा गया है की तरह कुछ के साथ एल someVar या एक शीर्ष-स्तर var someVar घोषित किया गया।

यह तब भी काम करेगा जब लोड किया गया मान undefined है।

संबंधित मुद्दे