यदि जावास्क्रिप्ट में कुछ अपरिभाषित नहीं है तो परीक्षण करें


224

मैं जाँच कर रहा हूँ if(response[0].title !== undefined), लेकिन मुझे त्रुटि मिली:

अनक्रेड टाइप टाइप: अपरिभाषित की संपत्ति 'शीर्षक' नहीं पढ़ सकते हैं।


स्टैकओवरफ़्लो में यहाँ उत्तर देखें। stackoverflow.com/questions/858181/…
लुइस वालेंसिया

जवाबों:


345

response[0] परिभाषित नहीं किया गया है, अगर यह परिभाषित है और फिर इसकी संपत्ति के शीर्षक के लिए जाँच करें।

if(typeof response[0] !== 'undefined' && typeof response[0].title !== 'undefined'){
    //Do something
}

20
वोटों की संख्या के बावजूद, यह चेक प्रदर्शन करने का एक अच्छा तरीका undefinedनहीं है क्योंकि यह एक जावास्क्रिप्ट कीवर्ड नहीं है (हालांकि हर कोई लगता है कि यह है)। यदि आप चाहते हैं, तो आप नामक एक चर बना सकते हैं undefinedऔर फिर यह चेक गलत होगा। जाँच करने का एकमात्र सही तरीका है (typeof myVar !== 'undefined')
BadHorsie

4
@BadHorsie समझ में आता है, मैंने आपकी टिप्पणी के साथ उत्तर को अपडेट किया।
अमोस्रीवेरा

1
क्या होगा यदि एक चर मौजूद है और उसमें स्ट्रिंग है जिसमें 'अपरिभाषित' लिखा है?
टॉमीनेस

@BadHorsie आपका तर्क फर्जी है। मुझे फिर से परिभाषित क्यों करना चाहिए undefined?
रॉबर्ट सीमर

@amosrivera नहीं, उसकी टिप्पणी का कोई मतलब नहीं था। आपने अपना जवाब खराब कर दिया।
रॉबर्ट सिएमर

39

बस जाँच करें कि response[0]क्या अपरिभाषित है:

if(response[0] !== undefined) { ... }

यदि आपको अभी भी शीर्षक की स्पष्ट रूप से जांच करने की आवश्यकता है, तो प्रारंभिक जांच के बाद ऐसा करें:

if(response[0] !== undefined && response[0].title !== undefined){ ... }

35

मुझे उपरोक्त सभी अन्य कोड उदाहरणों से परेशानी थी। क्रोम में, यह वह शर्त थी जो मेरे लिए काम करती थी:

typeof possiblyUndefinedVariable !== "undefined"

मुझे अन्य ब्राउज़रों में परीक्षण करना होगा और देखना होगा कि मैं कैसे चीजें ग्रहण करता हूं।


2
वही - मैंने पाया undefinedकि एक स्ट्रिंग होना था।
20

यह क्रोम के साथ कुछ नया होना चाहिए (जैसे कि मैं क्रोम 41 जीटी पर जीतता हूं)। स्वीकार किए जाते हैं जवाब बस ठीक काम करने के लिए इस्तेमाल किया! : P
joe

13

वास्तव में आपको इसे एक कोशिश / पकड़ ब्लॉक के साथ घेरना होगा ताकि आपका कोड काम करने से न रोके। ऐशे ही:

try{
    if(typeof response[0].title !== 'undefined') {
        doSomething();
    }
  }catch(e){
    console.log('responde[0].title is undefined'); 
  }

मैं IE 8 को देख रहा था और एक कोशिश कैच करने की जरूरत थी।
रानानोद

1
यह सबसे अच्छा तरीका है यदि आप परीक्षण कर रहे हैं यदि कोई फ़ंक्शन अपरिभाषित है
edepperson

अपरिभाषित की जांच करने के लिए एक त्रुटि फेंकना एक अच्छा समाधान नहीं है। @amosrivera सबसे अच्छा समाधान है।
user3658423

@ user3658423: यह एक त्रुटि नहीं है। यह केवल स्क्रिप्ट को रोकने से रोकता है यदि प्रतिक्रिया अघोषित है (क्योंकि इससे कोई त्रुटि होगी)।
एंड्रे लुइज़

कभी-कभी त्रुटियां मददगार हो सकती हैं। आपके प्रस्तावित समाधान के साथ, यदि doSomething () एक अपवाद को फेंकता है, तो आप अपने कंसोल में देखेंगे कि सभी "रिस्पॉन्स [0] है।। .js "। आखिरकार एक दूसरा डेवलपर शायद कंसोल.लॉग () स्टेटमेंट पर टिप्पणी करेगा, जिससे एक 3 डी डेवलपर के लिए और अधिक मुश्किल हो जाएगा और doSomething () के भीतर गहरी हो रही बग को ठीक कर देगा।
एरिक सस्टैंडैंड 14


1

यह होगा क्योंकि response[0]खुद अपरिभाषित है।



0

जांचें कि क्या आप response[0]वास्तव में मौजूद हैं, त्रुटि यह सुझाव देती है कि ऐसा नहीं है।


0

आपको पहले जांचना होगा कि क्या response[0]अपरिभाषित है, और केवल अगर यह नहीं है, तो बाकी की जांच करें। इसका मतलब है कि आपके मामले में, response[0]अपरिभाषित है।


0

मुझे पता है कि मैं यहां 7 महीने देरी से गया था, लेकिन मुझे यह सवाल मिला और यह दिलचस्प लग रहा है। मैंने अपने ब्राउज़र कंसोल पर यह कोशिश की।

try{x,true}catch(e){false}

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

var isxdefined = eval('try{x,true}catch(e){false}')

1
एक दिलचस्प दृष्टिकोण अगर मैं खुद कह सकता हूं।
ब्रैंडिटो

0

इनमें से कुछ उत्तरों में एक बुनियादी गलतफहमी है कि कैसे उपयोग किया जाए typeof

ग़लत

if (typeof myVar === undefined) {

सही बात

if (typeof myVar === 'undefined') {

कारण यह है कि typeofएक स्ट्रिंग लौटाता है। इसलिए, आपको यह देखना चाहिए कि इसने स्ट्रिंग को "अपरिभाषित" के बजाय वापस लौटा दिया है undefined(उद्धरण चिह्नों में संलग्न नहीं), जो स्वयं जावास्क्रिप्ट के आदिम प्रकारों में से एक हैtypeofऑपरेटर प्रकार का मान प्रदान कभी नहीं होगा undefined


परिशिष्ट

यदि आप गलत तुलना का उपयोग करते हैं तो आपका कोड तकनीकी रूप से काम कर सकता है, लेकिन संभवत: उस कारण के लिए नहीं जो आप सोचते हैं। undefinedजावास्क्रिप्ट में कोई preexisting चर नहीं है - यह किसी प्रकार का जादू कीवर्ड नहीं है जिससे आप चीजों की तुलना कर सकते हैं। आप वास्तव में नामक एक चर बना सकते हैं undefinedऔर इसे कोई भी मूल्य दे सकते हैं जिसे आप पसंद करते हैं।

let undefined = 42;

और यहां एक उदाहरण दिया गया है कि पहली विधि गलत साबित करने के लिए आप इसका उपयोग कैसे कर सकते हैं:

https://jsfiddle.net/p6zha5dm/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.