2010-02-20 13 views
6

मैं यह जानना चाहता हूं कि जावास्क्रिप्ट चर मौजूद है या नहीं। यह है कि मैं क्या है अब तक जो एक साथ विभिन्न मंचों से पत्थर किया गया था:पता लगाएं कि कोई वैरिएबल मौजूद है

function valueOfVar(foo){ 

    var has_foo = typeof foo != 'undefined'; 

    if(has_foo){ 
     alert('1 = true'); 
     return true; 
    } 
    else { 
     alert('1 = false'); 
     return false; 
    } 

} 

कृपया ध्यान दें, मैं foo के रूप में एक स्ट्रिंग में पारित करने के लिए चाहते हैं। उदाहरण: valueOfVar (box_split [0] + '_ 2')

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

एक JQuery कार्यान्वयन जो काम करता है वह भी महान होगा क्योंकि मैं इसका उपयोग करता हूं।

सब किसी भी मदद

उत्तर

6

क्या आपका ऐसा कुछ मतलब है?

function variableDefined (name) { 
    return typeof this[name] !== 'undefined'; 
} 

console.log(variableDefined('fred')); 
// Logs "false" 

var fred = 10; 
console.log(variableDefined('fred')); 
// Logs "true" 

आप स्थानीय चर को संभालने में सक्षम होना चाहते हैं आप कुछ इस तरह काफी अजीब करना होगा:

function variableDefined2 (value) { 
    return typeof value !== 'undefined'; 
} 

function test() { 
    var name = 'alice' 
    console.log(variableDefined2(eval(name))); 
    var alice = 11; 
    console.log(variableDefined2(eval(name))); 
} 

test(); 
// Logs false, true 
+0

यह अभी भी सभी मामलों पर सच है! – Abs

+0

यह तब नहीं होता जब मैं क्रोम के जावास्क्रिप्ट कंसोल में इसका परीक्षण करता हूं। आप इसका परीक्षण कैसे कर रहे हैं? – Rich

+0

हाँ, यह काम किया! बहुत खुबस! गलती यह थी कि मैंने अभी नाम को foo में नहीं बदला ... मैं जिस चर का उपयोग कर रहा था। धन्यवाद अमीर :) – Abs

1

समस्या अपने valueOfVar(box_split[0]+'_2') परीक्षण के साथ के लिए धन्यवाद कि आप अपरिभाषित विशेषता के लिए एक स्ट्रिंग जोड़कर कर रहे हैं। 'undefined_2' के मान के साथ आप हमेशा valueOfVar() पर एक स्ट्रिंग पास करेंगे।

आप देखेंगे कि typeof ऑपरेटर 'string' वापस आ जाएगी अगर आप निम्न प्रयास करें:

function valueOfVar(foo){ 
    alert(typeof foo); 
} 

valueOfVar(box_split[0]+'_2'); 

typeof ऑपरेटर परीक्षणों के इन प्रकार के लिए काम करेंगे, लेकिन आप अपरिभाषित चर के लिए कुछ भी नहीं जोड़ी जा सकती है , अन्यथा यह हमेशा सत्य परीक्षण करेगा:

if (typeof foo === 'undefined') { 
    // foo does not exist 
} 
else { 
    // it does 
} 
+0

box_split [0] परिभाषित किया गया है। आपको ऐसा क्यों लगता था कि यह अनिर्धारित था? इसका "चक" का मूल्य है। – Abs

0

सुनिश्चित नहीं हैं कि अगर यह आपकी समस्या को संबोधित करता है, लेकिन जावास्क्रिप्ट में, रिक्त है अपरिभाषित के रूप में एक ही बात नहीं है। यदि आपके द्वारा लिखा गया कोड परीक्षण के लिए सही है तो एक चर परिभाषित नहीं किया गया है। आईई:

<script> 
window.onload = function() 
{ 
    alert(typeof(abcd) == "undefined"); //true 
    abcd = null; 
    alert(typeof(abcd) == "undefined"); //false 
}; 
</script> 

वैसे, शून्य का प्रकार "ऑब्जेक्ट" है।

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