जावास्क्रिप्ट बनाम अशक्त और अपरिभाषित के लिए जाँच = और === के बीच का अंतर


579
  1. मैं एक चर की जांच कैसे करूं अगर यह nullया undefinedक्या है nullऔर के बीच अंतर क्या है undefined?

  2. क्या अंतर है ==और ==="===" के लिए Google को खोजना मुश्किल है)?


10
2. यहाँ अंतर ==और ===अच्छी तरह से वर्णित है
उज्बोन

1. === के बजाय ==: जावास्क्रिप्ट दो अलग-अलग प्रकार के समानता ऑपरेटरों का उपयोग करता है: === | ! == और == | ! = तुलना करते समय हमेशा पूर्व सेट का उपयोग करना सबसे अच्छा अभ्यास माना जाता है। "यदि दो ऑपरेंड एक ही प्रकार और मूल्य के हैं, तो === सच पैदा करता है और! == गलत पैदा करता है।" - जावास्क्रिप्ट: द गुड पार्ट्स हालांकि, जब == और! = के साथ काम करते हैं, तो आप विभिन्न प्रकार के साथ काम करते समय मुद्दों में भाग लेंगे। इन मामलों में, वे असफलताओं के लिए मूल्यों का तालमेल बिठाने की कोशिश करेंगे। code.tutsplus.com/tutorials/…
jasonleonhard

4
आप Google के लिए खोज कर सकते हैं: "सख्त समानता ऑपरेटर" - जो कि बहुत ही प्रासंगिक परिणाम प्राप्त करता है
डेनियल

बस यहाँ कई उत्तरों को जोड़ने के लिए जिन्हें आप चर या शून्य या अपरिभाषित हैं जाँचने के लिए lodash.com/docs#isNil फ़ंक्शन का उपयोग कर सकते हैं
Kfir Erez

जवाबों:


936

यदि यह nullया undefined...

परिवर्तनशील है null:

if (a === null)
// or
if (a == null) // but see note below

... लेकिन ध्यान दें उत्तरार्द्ध भी सच होगा यदि aहै undefined

क्या यह है undefined:

if (typeof a === "undefined")
// or
if (a === undefined)
// or
if (a == undefined) // but see note below

... लेकिन फिर से, ध्यान दें कि पिछले एक अस्पष्ट है; अगर aयह सच है तो यह भी होगा null

अब, उपरोक्त के बावजूद, उन लोगों के लिए जाँच करने का सामान्य तरीका इस तथ्य का उपयोग करना है कि वे गलत हैं :

if (!a) {
    // `a` is falsey, which includes `undefined` and `null`
    // (and `""`, and `0`, and `NaN`, and [of course] `false`)
}

यह कल्पना में टोबूलियन द्वारा परिभाषित किया गया है ।

... और के बीच अंतर क्या है nullऔर undefined?

वे दोनों मूल्य आमतौर पर कुछ की अनुपस्थिति को इंगित करने के लिए उपयोग किए जाते हैं। undefinedअधिक सामान्य एक है, जिसका उपयोग चर के डिफ़ॉल्ट मान के रूप में किया जाता है, जब तक कि वे कुछ अन्य मान असाइन नहीं किए जाते हैं, क्योंकि फ़ंक्शन तर्कों के मूल्य जो फ़ंक्शन को कॉल किए जाने पर प्रदान नहीं किए गए थे, और मूल्य के रूप में आपको तब मिलता है जब आप एक वस्तु पूछते हैं एक संपत्ति के लिए यह नहीं है। लेकिन यह उन सभी स्थितियों में स्पष्ट रूप से उपयोग किया जा सकता है। (किसी वस्तु के पास संपत्ति नहीं होने, और मूल्य के साथ संपत्ति होने के undefinedबीच अंतर होता है; undefinedएक तर्क के लिए एक फ़ंक्शन को कॉल करने और उस तर्क को पूरी तरह से छोड़ने के बीच एक अंतर होता है ।)

nullकी तुलना में थोड़ा अधिक विशिष्ट है undefined: यह एक खाली वस्तु संदर्भ है। जावास्क्रिप्ट शिथिल टाइप है, लेकिन निश्चित रूप से जावास्क्रिप्ट के साथ बातचीत की सभी चीजें शिथिल टाइप की नहीं हैं। यदि ब्राउज़र में DOM जैसे API को ऑब्जेक्ट संदर्भ की आवश्यकता होती है जो रिक्त है, तो हम उपयोग करते हैं null, नहीं undefined। और इसी तरह, डोम केgetElementById ऑपरेशन एक ऑब्जेक्ट संदर्भ देता है - या तो एक वैध (यदि यह DOM तत्व पाया गया), या null(यदि यह नहीं था)।

दिलचस्प है (या नहीं), वे अपने स्वयं के प्रकार हैं। जो कहना है, nullनल प्रकार undefinedमें एकमात्र मान है , और अपरिभाषित प्रकार में एकमात्र मान है।

"==" और "===" में क्या अंतर है

उनके बीच एकमात्र अंतर यह है कि ==मानों को मिलान करने के लिए प्रयास करने के लिए जबरदस्ती टाइप ===करेंगे , और नहीं करेंगे। उदाहरण के "1" == 1लिए सच है, क्योंकि "1"करने के लिए coerces 1। लेकिन "1" === 1है झूठी क्योंकि प्रकार से मेल नहीं खाते। ( "1" !== 1सच है।) का पहला (वास्तविक) कदम ===है "क्या ऑपरेंड के प्रकार समान हैं?" और यदि उत्तर "नहीं" है, तो परिणाम है false। यदि प्रकार समान हैं, तो यह वही करता है जो ==करता है।

प्रकार बलपूर्वक काफी जटिल नियमों का उपयोग करता है और इसके आश्चर्यजनक परिणाम हो सकते हैं (उदाहरण के लिए, "" == 0सच है)।

कल्पना में अधिक:


122
TJ के उत्तर को डिस्टिल करने के लिए, === का अर्थ है मान और प्रकार समान हैं।
स्लैपी

13
@Slappy: :-) @ MUG4N: हाँ, यह सही है। if (a) { ... }का अर्थ होगा "यदि aसत्य है," जहां "सत्य" एक शून्य, गैर-शून्य, गैर-अपरिभाषित, गैर-गलत, गैर-रिक्त-स्ट्रिंग मान है। :-)
टीजे क्राउडर

4
उम ... क्या आपको लगता है कि यह "उपयोगी नहीं था" (डाउनवोट बटन के टूलटिप को उद्धृत करने के लिए) के बारे में कुछ उपयोगी प्रतिक्रिया साझा करने के लिए डाउनवॉटर की देखभाल होगी?
टीजे क्राउडर

2
@ Mayeljko: मुझे लगता है कि इस बिंदु पर क्रॉकफोर्ड से गलती हो सकती है। यह सच है कि nullयह एक वस्तु नहीं है , यह एक वस्तु संदर्भ है जिसका अर्थ है "कोई वस्तु नहीं"। यह महत्वपूर्ण है, क्योंकि इसका उपयोग होस्ट-प्रदान किए गए इंटरफेस के साथ किया जाता है, जब वे ऑब्जेक्ट संदर्भ प्रदान करते हैं, लेकिन प्रदान करने के लिए एक नहीं है (उदाहरण के लिए, node.nextSiblingजब nodeइसके मूल में अंतिम तत्व है, या getElementByIdजब उस आईडी के साथ कोई तत्व नहीं है)। इसके लिए मेजबान जिस तकनीक का उपयोग करता है, वह उतनी लचीली नहीं हो सकती, क्योंकि जावास्क्रिप्ट वैरिएबल / प्रॉपर्टी के प्रकारों के बारे में है, इसलिए इसे nullओब्जेक्ट रिफ (जैसा कि विरोध किया गया undefined) होना आवश्यक था ।
टीजे क्राउडर

2
मुझे इस बात से सहमत होना होगा कि क्रॉफोर्ड गलत है। typeof null"वस्तु" लौटाने से समझ में आता है। केवल एक और मूल्य जो समझ में आता है वह "अशक्त" होगा, क्योंकि यह निश्चित रूप से कुछ अलग लौटना चाहिए typeof undefined। null एक शून्य ऑब्जेक्ट संदर्भ का प्रतिनिधित्व करता है, जो कि, बहुत कम से कम, इसका मतलब है कि इसे रखने वाला चर किसी प्रकार के 'ऑब्जेक्ट' के लिए है। अगर यह गलती थी, तो यह एक अच्छी गलती थी। वैसे भी, उत्तर के संबंध में, क्रॉस-विंडो स्क्रिप्टिंग के दौरान के बारे में टिप undefined= undefinedजानना अच्छा है, विशेष रूप से डीबगिंग उद्देश्यों के लिए।
15

93

अंतर सूक्ष्म है।

जावास्क्रिप्ट में एक undefinedवैरिएबल एक वैरिएबल है जिसे कभी घोषित नहीं किया गया, या कभी भी एक मान नहीं सौंपा गया। मान लीजिए कि आप var a;उदाहरण के लिए घोषित करते हैं, तब aहोगाundefined , क्योंकि इसे कभी भी कोई मूल्य नहीं दिया गया था।

लेकिन अगर आप असाइन करते हैं a = null;तो aअब हो जाएगा null। जावास्क्रिप्ट nullएक वस्तु है ( typeof nullयदि आप मुझ पर विश्वास नहीं करते हैं तो जावास्क्रिप्ट कंसोल में प्रयास करें), जिसका अर्थ है कि अशक्त एक मूल्य है (वास्तव में भीundefined में एक मूल्य है)।

उदाहरण:

var a;
typeof a;     # => "undefined"

a = null;
typeof null;  # => "object"

यह फ़ंक्शन तर्कों में उपयोगी साबित हो सकता है। आप एक डिफ़ॉल्ट मान चाहते हैं, लेकिन शून्य को स्वीकार्य मान सकते हैं। आप किस मामले में कर सकते हैं:

function doSomething(first, second, optional) {
    if (typeof optional === "undefined") {
        optional = "three";
    }
    // do something
}

यदि आप optionalपैरामीटर को doSomething(1, 2) thenछोड़ते "three"हैं doSomething(1, 2, null)तो वैकल्पिक स्ट्रिंग होगा लेकिन यदि आप पास होते हैं तो वैकल्पिक होगाnull

समान ==और कड़ाई से बराबर ===तुलना करने वालों के लिए, पहला वाला कमजोर प्रकार का है, जबकि कड़ाई से बराबर भी मानों के प्रकार की जांच करता है। इसका मतलब है कि 0 == "0"सच लौटेगा; जबकि 0 === "0"झूठे वापस आ जाएगा, क्योंकि एक संख्या एक स्ट्रिंग नहीं है।

आप के बीच की जाँच करने के लिए उन ऑपरेटरों का उपयोग कर सकते undefinedएक null। उदाहरण के लिए:

null === null            # => true
undefined === undefined  # => true
undefined === null       # => false
undefined == null        # => true

अंतिम मामला दिलचस्प है, क्योंकि यह आपको यह जांचने की अनुमति देता है कि क्या कोई चर अपरिभाषित है या अशक्त है और कुछ नहीं:

function test(val) {
    return val == null;
}
test(null);       # => true
test(undefined);  # => true

1
काइल सिम्पसन का दावा है कि टाइपऑफ़ नाउल "ऑब्जेक्ट" एक बग है: github.com/getify/You-Dont-Know-JS/blob/master/…
bzrk

15

इन सवालों के पूरे जवाब के लिए जाने के लिए युक्ति है। यहाँ एक सारांश है:

  1. एक चर के लिए x, आप कर सकते हैं:

    • जाँच करें कि क्या यह nullसीधे तुलना करके उपयोग कर रहा है ===। उदाहरण:x === null
    • जाँच करें कि क्या यह undefinedदो बुनियादी तरीकों में से एक है: प्रत्यक्ष तुलना undefinedया typeof। के लिए विभिन्न कारणों से , मैं पसंद typeof x === "undefined"
    • जांचें कि क्या यह एक है nullऔर undefinedउपयोग करके ==और थोड़ा रहस्यमय प्रकार के जबरदस्ती नियमों पर निर्भर x == nullकरता है, जिसका मतलब है कि वास्तव में आप क्या चाहते हैं।

  2. के बीच मूल अंतर ==और ===है कि अगर ऑपरेंड विभिन्न प्रकार के कर रहे हैं, है ===हमेशा वापस आ जाएगी false, जबकि ==एक ही प्रकार का उपयोग करते हुए एक या दोनों ऑपरेंड में परिवर्तित कर देंगे नियम है कि नेतृत्व कुछ थोड़ा unintuitive व्यवहार करने के लिए। यदि ऑपरेंड एक ही प्रकार के होते हैं (जैसे दोनों स्ट्रिंग्स हैं, जैसे कि typeofऊपर की तुलना में), ==और ===बिल्कुल समान व्यवहार करेंगे।

अधिक पढ़ने:


9

यदि यह शून्य या अपरिभाषित है तो मैं किसी चर की जांच कैसे कर सकता हूं

बस जांचें कि क्या एक चर का इस तरह एक वैध मूल्य है:

if(variable)

यदि चर सम्‍मिलित नहीं है तो यह सही होगा:

  • शून्य
  • अपरिभाषित
  • 0
  • असत्य
  • "" (एक रिक्त स्ट्रिंग)
  • NaN

8

अपरिभाषित

इसका मतलब है कि चर अभी तक intialized नहीं है।

उदाहरण :

var x;
if(x){ //you can check like this
   //code.
}

के बराबर होती है (==)

यह केवल चेक वैल्यू है, डेटाटाइप के बराबर है।

उदाहरण :

var x = true;
var y = new Boolean(true);
x == y ; //returns true

क्योंकि यह केवल मान की जाँच करता है।

सख्त बराबर (===)

मान की जाँच करता है और डेटाटाइप समान होना चाहिए।

उदाहरण :

var x = true;
var y = new Boolean(true);
x===y; //returns false.

क्योंकि यह जाँच करता है कि डेटाटाइप x एक आदिम प्रकार है और y एक बूलियन ऑब्जेक्ट है।


4

विज्ञापन 1. nullवैश्विक वस्तु की संपत्ति के लिए एक पहचानकर्ता नहीं है, जैसे undefined हो सकता है

विज्ञापन 2. ===चेक वैल्यू और प्रकार। ==न (का उपयोग करते हुए तुलना से पहले एक ही प्रकार और बनाया अंतर्निहित रूपांतरण की आवश्यकता होती है .valueOf()और .toString())। यहाँ आपके पास सभी ( src ) हैं:

अगर

यहाँ छवि विवरण दर्ज करें

== (इसकी उपेक्षा ! = )

यहाँ छवि विवरण दर्ज करें

=== (इसकी उपेक्षा ! == )

यहाँ छवि विवरण दर्ज करें


1
यह उल्लेख के लायक है document.all == nullऔरdocument.all !== null
एक उपयोगकर्ता

1

अपने (तार्किक) की जांच एक निषेध के लिए है और आप दोनों जे एस पर कब्जा करना चाहते हैं (!) nullऔर undefined (अलग-अलग ब्राउज़र आप अलग अलग परिणाम देगा के रूप में) आप कम प्रतिबंधक तुलना का प्रयोग करेंगे: उदाहरण के लिए:

var ItemID = Item.get_id();
if (ItemID != null)
{
 //do stuff
}

यह nullऔर दोनों पर कब्जा करेगाundefined


0

विभिन्न तर्क के साथ प्रयास करें । आप सत्यापन के लिए सभी चार (4) शर्त के लिए bellow कोड का उपयोग कर सकते हैं, जैसे शून्य नहीं, रिक्त नहीं, अपरिभाषित नहीं और शून्य नहीं केवल जावास्क्रिप्ट और jquery में इस कोड ((- (चर))) का उपयोग करें।

function myFunction() {
var data;  //The Values can be like as null, blank, undefined, zero you can test

if(!(!(data)))
{
   //If data has valid value
    alert("data "+data);
} 
else 
{
    //If data has null, blank, undefined, zero etc.
    alert("data is "+data);
}

}

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