2012-01-16 22 views
107

तो यह एक बहुत बुनियादी सवाल वास्तव में सिर्फ मेरी जिज्ञासा को संतुष्ट करने के लिए है, लेकिन वहाँ इस तरह कुछ करने के लिए एक तरीका है:जावास्क्रिप्ट instanceof वक्तव्य

if(obj !instanceof Array) { 
    //The object is not an instance of Array 
} else { 
    //The object is an instance of Array 
} 

कुंजी यहाँ नहीं उपयोग करने के लिए सक्षम किया जा रहा! उदाहरण के सामने। आम तौर पर जिस तरह से मैं इसे सेट अप करने के लिए है इस तरह है:

if(obj instanceof Array) { 
    //Do nothing here 
} else { 
    //The object is not an instance of Array 
    //Perform actions! 
} 

और इसकी एक छोटे से परेशान एक और को बयान बनाने के लिए जब मैं बस अगर वस्तु एक विशिष्ट प्रकार है जानना चाहता हूँ है।

उत्तर

236

कोष्ठक में संलग्न और बाहर पर नकारात्मक। के रूप में दूसरों को पहले से ही जवाब दे दिया है -

if(!(obj instanceof Array)) { 
    //... 
} 
+8

प्रयास करें @ hrishikeshp19 - मैं मुझे यकीन है कि आपको माता-पिता की ज़रूरत है, मैंने अभी कोशिश की है कि क्रोम, आईई और नोड में और प्रत्येक होस्ट को उनकी आवश्यकता होती है। –

+0

@ riship89 माता-पिता की आवश्यकता है, सबूत: '' !! ओबीजे उदाहरण के बाद ''!! !! (' ओबीजे उदाहरण के लिए ऐरे)' '!! (सही) सही (सही) – zamnuts

+8

कारण यह है कि! ओबीजे का मूल्यांकन पहले (! obj exampleof Array) में किया जाता है, जिसका मूल्यांकन करता है सच (या झूठा), जो तब होता है (अगर बूल उदाहरण से ऐरे), जो स्पष्ट रूप से झूठा है। इसलिए, सुझाव के अनुसार इसे कोष्ठक में लपेटें। – ronnbot

57
if (!(obj instanceof Array)) { 
    // do something 
} 

इस के लिए जाँच करने के लिए सही तरीका है। सुझाव दिया गया है कि दो दो रणनीति काम नहीं करेगा और समझा जाना चाहिए ...

! ऑपरेटर के बिना ब्रैकेट के मामले में।

if (!obj instanceof Array) { 
    // do something 
} 

इस मामले में, प्राथमिकता का क्रम महत्वपूर्ण है (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence)। ! ऑपरेटर instanceof ऑपरेटर से पहले है। तो, !obj पहले false का मूल्यांकन किया गया (यह ! Boolean(obj) के बराबर है); तो आप परीक्षण कर रहे हैं कि false instanceof Array, जो स्पष्ट रूप से नकारात्मक है।

instanceof ऑपरेटर से पहले ! ऑपरेटर के मामले में।

if (obj !instanceof Array) { 
    // do something 
} 

यह एक सिंटैक्स त्रुटि है। != जैसे ऑपरेटर एक एकल ऑपरेटर हैं, क्योंकि एक इक्विल्स पर लागू नहीं किया गया है। !instanceof के रूप में ऐसा कोई ऑपरेटर नहीं है जैसा कि !< ऑपरेटर नहीं है।

+0

एनबी। मैं सर्जीओ के जवाब पर यह एक टिप्पणी कर सकता था क्योंकि यह स्पष्ट रूप से सही है लेकिन मैं एसओ का सदस्य नहीं था इसलिए टिप्पणी करने के लिए पर्याप्त प्रतिष्ठा अंक नहीं थे। – chrismichaelscott

+4

केवल उत्तर दें कि ** किसी समस्या का ** क्यों (इस तरह की) स्वीकार करनी चाहिए ... –

+0

@chrismichaelscott मेरी राय में, और मुझे यकीन है कि मैं अकेला नहीं हूं, आपके जैसा उत्तर वही है जो सबसे ज्यादा वांछित है कोई भी यहां एक प्रश्न पूछ रहा है।यह स्पष्ट है, बिंदु पर, और प्रस्तुत मुद्दे के आसपास जाने के लिए पर्याप्त जानकारी और उदाहरण साझा करता है। बहुत बहुत धन्यवाद। और मुझे लगता है कि आप प्रतिष्ठा के लायक हैं और स्वीकार्य उत्तर होना चाहिए था। – cram2208

18

यह कोष्ठक (कोष्ठक) भूल जाना आसान है, इसलिए आप कर की आदत बना सकते हैं:

if(obj instanceof Array === false) { 
    //The object is not an instance of Array 
} 

या

if(false === obj instanceof Array) { 
    //The object is not an instance of Array 
} 

यह here

+0

यह वास्तव में मेरे लिए अस्वीकृति से क्लीनर दिखता है। –

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