2012-08-08 19 views
9

मैं एक पुन: प्रयोज्य फ़ंक्शन बनाने की कोशिश कर रहा हूं जो जांचता है कि कोई चर अपरिभाषित है या नहीं। अजीब चीज यह है कि जब मैं कोड को निष्पादित करने के लिए चर को पास करता हूं तो यह काम नहीं करता है, लेकिन यदि मैं फ़ंक्शन के बाहर एक ही तर्क का उपयोग करता हूं, तो यह काम करता है। क्या इस समारोह को काम करने के लिए परिभाषित करने का कोई तरीका है?कार्य करने के लिए अपरिभाषित चर पारित करते समय त्रुटि?

//THIS WORKS AND RETURN FALSE 
alert(typeof sdfsdfsdfsdf !== 'undefined'); 

//THIS GIVES AN ERROR, WHY? 
//Uncaught ReferenceError: sdfsd is not defined 
function isDefined(value) { 
     alert(typeof value !== 'undefined' && value !== null) 
} 

isDefined(sdfsd); 

लाइव उदाहरण यहाँ (त्रुटियों के लिए सांत्वना की जाँच): http://jsfiddle.net/JzJHc/

+0

आप यह नहीं कर सकते हैं। यदि यह अस्तित्व में नहीं है तो आप इसे जांचने के लिए अपने फ़ंक्शन में कैसे प्राप्त कर सकते हैं? इसके अलावा: 'टाइपफ़ मान! ==' अपरिभाषित '&& value! == null' बहुत अनावश्यक है। यदि आप 'शून्य' या 'अपरिभाषित' परीक्षण चाहते हैं, तो बस 'value == null' करें। यह वही काम करता है। –

उत्तर

10

जब आप पारित करने के लिए कोशिश आप जब तक यह एक typeof परीक्षण

में है एक चर है कि घोषित नहीं किया गया उपयोग नहीं कर सकते एक चर जो किसी फ़ंक्शन में घोषित नहीं किया गया है, जिसे उस अविकसित चर का उपयोग करने पर विचार किया जाता है। आप isDefined

नहीं अंदर से पहले आपको उसे समारोह में पारित के लिए

if (typeof sdsdsd !== 'undefined') 

जांच चलाने की जरूरत है, ध्यान देंगे कि त्रुटि फोन करने वाले है। असल में इसका मतलब है कि आप isDefined फ़ंक्शन लिख सकते हैं जो अविकसित चर स्वीकार करता है। आपका फ़ंक्शन केवल अपरिभाषित गुणों (जो कि पास करने के लिए ठीक है) के लिए काम कर सकता है

हालांकि, मैं उत्सुक हूं, वास्तविक दुनिया का मामला क्या है जहां आप एक चर पारित कर रहे हैं जो मौजूद नहीं है? आपको अपने सभी चर घोषित करना चाहिए और वे पहले से मौजूद होना चाहिए। अगर आपने var sdsdsds घोषित किया था तो यह undefined के मान के साथ मौजूद होगा और आपका isDefined फ़ंक्शन ठीक काम करेगा।

+0

+1 * विशेष रूप से * अंतिम पैराग्राफ के लिए। –

+0

दरअसल, आपके आखिरी पैराग्राफ ने मुझे चीजों को फिर से व्यवस्थित करने के बारे में सोचा। मेरा परिदृश्य यह है कि एक एमवीसी व्यू के माध्यम से एक चर प्रस्तुत किया जा रहा है। लेकिन अगर दृश्य में कोई परिणाम न हो तो दृश्य को प्रस्तुत करने की शर्त नहीं है। तो मेरा प्रारंभिक जावास्क्रिप्ट (किसी अन्य दृश्य से), जांचता है कि क्या ऑब्जेक्ट मौजूद है या कोई क्रिया नहीं करना है। तो आप सही हैं, मुझे एमवीसी की स्थिति के बाहर परिवर्तनीय घोषित करना चाहिए। सलाह के लिए धन्यवाद! – TruMan1

+0

एक और मामला है कि आप एक वेरिएबल का उपयोग कर सकते हैं जिसे घोषित नहीं किया गया है * हटाएं *। – zsong

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