चेक करें कि ऑब्जेक्ट जावास्क्रिप्ट में मौजूद है या नहीं


313

मैं जावास्क्रिप्ट में किसी वस्तु के अस्तित्व को कैसे सत्यापित करूं?

निम्नलिखित कार्य:

if (!null)
   alert("GOT HERE");

लेकिन यह एक त्रुटि फेंकता है:

if (!maybeObject)
   alert("GOT HERE");

त्रुटि:

maybeObject परिभाषित नहीं है।

जवाबों:


578

आप सुरक्षित रूप से typeofअपरिभाषित चर पर ऑपरेटर का उपयोग कर सकते हैं ।

यदि इसे शून्य सहित कोई मान असाइन किया गया है, तो टाइपऑफ़ अपरिभाषित के अलावा कुछ और लौटाएगा। टाइपोफ़ हमेशा एक स्ट्रिंग लौटाता है।

इसलिये

if (typeof maybeObject != "undefined") {
   alert("GOT THERE");
}

73
अगर इसकी हमेशा एक स्ट्रिंग, आप वास्तव !==में तुलना के लिए (चाहिए) कर सकते हैं ।
मीका

9
चूंकि यह एक मुख्य जावास्क्रिप्ट विशेषता है, यह एक शर्म की बात है कि एक बेहतर और कम त्रुटि-निर्मित अंतर्निहित नहीं है। स्ट्रिंग तुलना 100% से कंपाइलर को मज़बूती से बताती है जब हमने इस प्रकार के चेक में एक छोटी सी गलती (एक टाइपो की तरह) की थी।
डोमी

मेरे मामले में, इस वस्तु के लिए खोज करने के लिए देख रहे हैं, तो यह मदद नहीं करता है। मैं एक समाधान चाहता हूं मैं कंसोल में स्वागत के रूप में उपयोग कर सकता हूं, यह देखने के लिए कि क्या ऑब्जेक्ट किसी भी क्लिकरी के बिना डोमट्री में है ..
ब्लैंम

@TJCrowder वे उदाहरण अब सुलभ नहीं लगते हैं।
स्टीफन वैन डेन अककर

1
@StefanvandenAkker: बुरे उदाहरण का लिंक jsbin.com/ibeho3/1 होना चाहिए । अच्छा उदाहरण ठीक था: jsbin.com/ibeho3/2 । (अफसोस की बात है कि JSBin नवीनतम को पुनर्निर्देशित करता है, और लोग इसका संपादन अपने जीवन के एक इंच के भीतर कर रहे हैं।)
TJ Crowder

48

यहां बहुत सारे अर्ध-सत्य हैं, इसलिए मैंने सोचा कि मैं कुछ चीजें स्पष्ट करता हूं।

वास्तव में आप सटीक रूप से यह नहीं बता सकते हैं कि क्या कोई चर मौजूद है (जब तक कि आप हर दूसरी पंक्ति को एक कोशिश करने वाले ब्लॉक में लपेटना नहीं चाहते हैं)।

कारण है जावास्क्रिप्ट का यह कुख्यात मूल्य है undefinedजिसका हड़ताली मतलब यह नहीं है कि चर परिभाषित नहीं है, या यह मौजूद नहीं हैundefined !== not defined

var a;
alert(typeof a); // undefined (declared without a value)
alert(typeof b); // undefined (not declared)

तो एक चर जो मौजूद है और दूसरा वह जो आपको undefined टाइप नहीं कर सकता है ।

@ केविन की गलत धारणा के लिए, के रूप में null == undefined। यह टाइप क्यूरेशन के कारण होता है, और यह मुख्य कारण है कि क्रॉकफोर्ड हर किसी को बताता रहता है जो इस तरह की चीज के बारे में अनिश्चित है कि वह हमेशा ===गलत समानता वाले मूल्यों के परीक्षण के लिए सख्त समानता ऑपरेटर का उपयोग करें । null !== undefinedआपको वह देता है जिसकी आप उम्मीद कर सकते हैं। कृपया ध्यान दें, यह foo != nullजाँचने का एक प्रभावी तरीका हो सकता है कि एक चर है undefinedया नहीं null। बेशक आप स्पष्ट हो सकते हैं, क्योंकि यह पठनीयता में मदद कर सकता है।

यदि आप प्रश्न को जांचने के लिए प्रतिबंधित करते हैं कि क्या कोई वस्तु मौजूद है, typeof o == "object"तो एक अच्छा विचार हो सकता है, सिवाय इसके कि अगर आप ऑब्जेक्ट को एरेस नहीं मानते हैं, क्योंकि यह भी इस प्रकार की सूचना देगा, objectजिससे आप थोड़ा भ्रमित हो सकते हैं। इसका उल्लेख नहीं करना typeof nullभी आपको देगा objectजो कि गलत है।

मौलिक क्षेत्र है जहां आप वास्तव में के बारे में सावधान रहना चाहिए typeof, undefined, null, unknownऔर अन्य misteries मेजबान वस्तुओं रहे हैं। उन पर भरोसा नहीं किया जा सकता। वे लगभग किसी भी गंदी चीज को करने के लिए स्वतंत्र हैं जो वे चाहते हैं। तो उनके साथ सावधान रहें, यदि आप कर सकते हैं, तो कार्यक्षमता की जांच करें, क्योंकि यह एक ऐसी सुविधा का उपयोग करने का एकमात्र सुरक्षित तरीका है जो मौजूद नहीं हो सकता है।


5
foo!=nullअगर fooपरिभाषित नहीं किया जाता है तो बस एक रेफ़रेंस प्रोड्यूस करेगा । इस प्रकार, इसका उपयोग करना बेहतर है typeof, जब तक कि आप अपवाद को पकड़ने की योजना नहीं बना रहे हों।
JAL

1
मैं इसे आपके लिए फिर से लिखता हूं: undefined !== not defined&&foo != null can be an effective way to check if a variable is neither 'undefined' nor 'null' । मैंने कहा कि != nullअगर यह मौजूद है तो जाँच के लिए अच्छा नहीं है। आप इसे संदर्भ से बाहर ले जा रहे हैं। (मैंने यह भी उल्लेख किया कि यह एक विचारधारा है, ओपी के प्रश्न के विषय से कड़ाई से संबंधित नहीं है)
gblazex

2
आप फिर से भ्रमित करते हैं कि शब्द किस प्रकार से परिभाषित नहीं है undefined। वे एक जैसे नहीं हैं। (note) it can be used !== you should use। पढ़ते समय सामान्य ज्ञान का प्रयोग करें। जब चर घोषित किया जाता है (पैरामीटर सूची, या कहीं और) और आप यह जांचना चाहते हैं कि क्या इसे एक मूल्य मिला है, !=अशक्त पूरी तरह से सुरक्षित है। ओपी ने जो मांगा, उससे यह एक अलग प्रयोग है, इसीलिए मैंने इसे नोट के रूप में प्रस्तुत किया। पूरा पैराग्राफ @ केविन के पोस्ट और टाइप कॉर्शन बीडब्ल्यूटी के बारे में है। जैसा कि आप ध्यान से पढ़े तो नोटिस कर सकते हैं।
gblazex

@JAL आप बात यह है कि आप कर रहे हैं भूल रहे हैं नहीं का उपयोग कर एक त्रुटि खतरे में डालकर != nullजब आप जानते हैं कि चर घोषित किया गया है। फ़ंक्शन तर्कों की जाँच करने के लिए यह बहुत उपयोगी है, विचार करें:var hasValue = function(foo) {return foo != null}
tybro0103

@ tybro0103 यह सच है, लेकिन पूरा मुद्दा "मैं जावास्क्रिप्ट में किसी वस्तु के अस्तित्व को कैसे सत्यापित करूं?"। यदि आप निश्चित हैं कि यह घोषित किया गया है, तो यह एक अलग स्थिति है।
जेएएल


8

दो तरीके।

स्थानीय चर के लिए टाइपोफ़

आप टाइपोफ़ का उपयोग करके स्थानीय वस्तु के लिए परीक्षण कर सकते हैं:

if (typeof object !== "undefined") {}

वैश्विक चर के लिए विंडो

आप विंडो ऑब्जेक्ट का निरीक्षण करके एक वैश्विक ऑब्जेक्ट (वैश्विक गुंजाइश पर परिभाषित) के लिए परीक्षण कर सकते हैं:

if (window.FormData) {}


5

आप "टाइपोफ़" का उपयोग कर सकते हैं।

if(typeof maybeObject != "undefined")
    alert("GOT HERE");

4

कुछ समय पहले धागा खोला गया था। मुझे लगता है कि इस बीच एक टर्नरी ऑपरेटर का उपयोग सबसे सरल विकल्प है:

maybeObject ? console.log(maybeObject.id) : ""

हाँ, की तर्ज पर कुछ var maybeObject = typeof maybeObject !== "undefined" ? Chart:false;और जाँच करें कि क्या नहीं false
हर्मन 6006

3

मैं बस if(maybeObject)अपने javascripts में null check के रूप में करता था।

if(maybeObject){
    alert("GOT HERE");
}

तो केवल अगर maybeObject- एक वस्तु है, तो अलर्ट दिखाया जाएगा। मेरी साइट में एक उदाहरण है।

https://sites.google.com/site/javaerrorsandsolutions/home/javascript-dynamic-checkboxes


समस्या है, तो है maybeObject घोषित नहीं किया गया था यह त्रुटि फेंक देगा: maybeObject परिभाषित नहीं है
Juanma मेनेंडेज़

यदि maybeObjectहै 0, 0.0, or "", तो यह झूठे की जाँच करता है
alejandrociatti

3

मैंने अभी-अभी ऊपर से टाइपऑफ उदाहरणों का परीक्षण किया है और कोई भी मेरे लिए काम नहीं करता है, इसलिए इसके बजाय मैंने इसका उपयोग किया है:

    btnAdd = document.getElementById("elementNotLoadedYet");
    if (btnAdd) {
       btnAdd.textContent = "Some text here";
    } else {
      alert("not detected!");
    }


1

ऑब्जेक्ट / वैरिएबल के अस्तित्व की जांच करने के अलावा आप "सबसे खराब स्थिति" आउटपुट प्रदान करना चाहते हैं या कम से कम इसे एक चेतावनी में फंसा सकते हैं ताकि यह किसी का ध्यान न जाए।

फ़ंक्शन का उदाहरण जो जांचता है, विकल्प प्रदान करता है, और त्रुटियों को पकड़ता है।

function fillForm(obj) {
  try {
    var output;
    output = (typeof obj !== 'undefined') ? obj : '';
    return (output);
  } 
  catch (err) {
    // If an error was thrown, sent it as an alert
    // to help with debugging any problems
    alert(err.toString());
    // If the obj doesn't exist or it's empty 
    // I want to fill the form with ""
    return ('');
  } // catch End
} // fillForm End

मैंने इसे भी बनाया क्योंकि मैं जिस वस्तु को पास कर रहा था वह x, xm, xm [z] और टाइपोफ़ xm [z] हो सकती है अगर xm मौजूद नहीं होता है तो एक त्रुटि के साथ विफल हो जाएगा।

मुझे उम्मीद है यह मदद करेगा। (BTW, मैं JS के साथ नौसिखिया हूँ)


1

मेरे लिए इसने DOM-object के लिए काम किया:

if(document.getElementsById('IDname').length != 0 ){
   alert("object exist");
}

1

यदि आप केवल इसके अस्तित्व की परवाह करते हैं (क्या यह घोषित किया गया है?), तो स्वीकृत उत्तर ही पर्याप्त है:

if (typeof maybeObject != "undefined") {
   alert("GOT THERE");
}

यदि आपको इसकी वास्तविक कीमत की परवाह है, तो आपको जोड़ना चाहिए:

if (typeof maybeObject != "undefined" && maybeObject != null ) {
   alert("GOT THERE");
}

जैसा typeof( null ) == "object"

जैसे bar = { x: 1, y: 2, z: null}

typeof( bar.z ) == "object" 
typeof( bar.not_present ) == "undefined" 

इस तरह से आप जाँच लें कि यह न तो है nullया undefined, और के बाद से typeofयदि मान मौजूद नहीं है नहीं त्रुटि करता प्लस&& शॉर्ट सर्किट, आप एक रन-टाइम त्रुटि मिल कभी नहीं होगा।

व्यक्तिगत रूप से, मैं सुझाव दूंगा कि कहीं न कहीं एक सहायक fn (और चलो भरोसा नहीं करते typeof()):

function exists(data){
   data !== null && data !== undefined
}

if( exists( maybeObject ) ){
    alert("Got here!"); 
}

0
if (n === Object(n)) {
   // code
}

5
हालांकि यह कोड ब्लॉक ओपी के प्रश्न का उत्तर दे सकता है, यह उत्तर अधिक उपयोगी होगा यदि आप यह समझाते हैं कि यह कोड प्रश्न में कोड से अलग कैसे है, आपने क्या बदला है, आपने इसे क्यों बदला है और क्यों यह समस्या हल करता है दूसरों को पेश किए बिना।
मिफेट


-1

Div संरेखित टैब्ड पैनल का उपयोग करके एक फ्रेम इनलाइन फ्रेम के लिए टेक्स्टबॉक्स मान सेट करें। इसलिए सबसे पहले, मूल्य निर्धारित करने से पहले हमें चयनित टैब्लेट पैनल फ्रेम उपलब्ध चेक की जरूरत है या निम्नलिखित कोड का उपयोग नहीं करना चाहिए:

जावास्क्रिप्ट कोड:

/////////////////////////////////////////
<script>

function set_TextID()
            {
                try
                    {
                        if(!parent.frames["entry"])
                            {
                            alert("Frame object not found");    
                            }
                            else
                            {
                                var setText=document.getElementById("formx").value;
                                parent.frames["entry"].document.getElementById("form_id").value=setText;
                            }
                            if(!parent.frames["education"])
                            {
                            alert("Frame object not found");    

                            }
                            else
                            {
                                var setText=document.getElementById("formx").value;
                                parent.frames["education"].document.getElementById("form_id").value=setText;
                            }
                            if(!parent.frames["contact"])
                            {
                            alert("Frame object not found");    

                            }
                            else
                            {
                                var setText=document.getElementById("formx").value;
                                parent.frames["contact"].document.getElementById("form_id").value=setText;
                            }

                        }catch(exception){}
                }

</script>

-1

शून्य और अशक्त अंतर्निहित संकेत हैं। यदि आप स्क्रीन पर '0' अंकगणित, तुलना या मुद्रण नहीं कर रहे हैं, तो वास्तव में इसे टाइप करने की कोई आवश्यकता नहीं है। इसका निहितार्थ है। जैसा कि निहित है। इसी कारण से टाइपोफ की भी आवश्यकता नहीं है। घड़ी।

if (obj) कंसोल.लॉग ("मौजूद है");

मैंने नहीं देखा है या नहीं के लिए अनुरोध के रूप में इसके लिए शामिल नहीं है। के रूप में ज्यादा के रूप में मैं अतिरिक्त सामग्री जो सवाल में फिट नहीं है प्यार करता हूँ। इसे सरल रखें।


मैं प्रश्न में नहीं देख रहा हूँ : if (!maybeObject)- लेकिन वास्तव में, शीर्षक विपरीत के लिए पूछता है।
अरमाली

-4

सोचिये यह सबसे आसान है

if(myobject_or_myvar)
    alert('it exists');
else
   alert("what the hell you'll talking about");

-10

या, आप सभी मेरे अनन्य अस्तित्व का उपयोग शुरू कर सकते हैं () इसके बजाय पद्धति और असंभव मानी जाने वाली चीजों को करने में सक्षम हो सकते हैं। अर्थात:

जैसी चीजें: exists("blabla")या यहां तक ​​कि: exists("foreignObject.guessedProperty.guessNext.propertyNeeded")भी संभव हैं ...


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