जावास्क्रिप्ट। उदाहरण कथन


186

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

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!
}

और इसका थोड़ा सा कष्टप्रद है कि मुझे एक और बयान देना होगा जब मैं बस जानना चाहता हूं कि क्या वस्तु एक विशिष्ट प्रकार है।

जवाबों:


355

कोष्ठक में संलग्न और बाहर पर नकारात्मक।

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

इस मामले में, वरीयता का क्रम महत्वपूर्ण है ( https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence )। ! संचालक instof ऑपरेटर से पहले।


9
@ hrishikeshp19 - मुझे पूरा यकीन है कि आपको परगनों की ज़रूरत है, मैंने बस कोशिश की थी कि क्रोम, IE और नोड में और प्रत्येक ने उन्हें होस्ट किया।
मार्कस पोप

1
@ riship89 parens की आवश्यकता है, सबूत: !! obj instanceof Arrayगलत (गलत) !!(obj instanceof Array)रिटर्न देता है जबकि रिटर्न सही (सही)
zamnuts

10
इसका कारण यह है कि obj का मूल्यांकन पहले (अगर! Obj उदाहरण) में किया जाता है, जो कि सही (या गलत) का मूल्यांकन करता है, जो तब बन जाता है यदि (बूल इंस्टाफॉरे), जो स्पष्ट रूप से गलत है। इसलिए इसे सुझाए गए कोष्ठक में लपेटें।
२०:२२

1
यह कारण वास्तव में उत्तर का हिस्सा होना चाहिए, अन्यथा यह उत्तर नीचे दिए गए क्रिस से बेहतर नहीं है। @SergioTulentsev, क्या आप इतने दयालु होंगे और इस तरह से कुछ जोड़ेंगे: In this case, the order of precedence is important (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence). The ! operator precedes the instanceof operator. आपके उत्तर के लिए?
user0800

73
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
}

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


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

5
केवल ऐसे उत्तर जो किसी समस्या के कारण की व्याख्या करते हैं (जैसे यह एक) स्वीकार किया जाना चाहिए ...
रॉबर्ट रॉसमैन

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

42

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

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
}

इसे यहाँ आज़माएँ


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