javascript - जावास्क्रिप्ट शून्य जांच




null undefined (5)

अपना परीक्षण करने का सरल तरीका यह है:

function (data) {
    if (data) { // check if null, undefined, empty ...
        // some code here
    }
}

मैं निम्नलिखित कोड में आया हूं:

function (data) {
    if (data != null && data !== undefined) {
        // some code here
    }
}

मैं जावास्क्रिप्ट के लिए कुछ नया हूं, लेकिन, अन्य प्रश्नों से मैं यहां पढ़ रहा हूं, मैं इस धारणा के तहत हूं कि यह कोड ज्यादा समझ में नहीं आता है।

विशेष रूप से, यह उत्तर बताता है कि

यदि आप typeof अलावा किसी भी संदर्भ में एक अपरिभाषित चर का उपयोग करते हैं तो आपको एक त्रुटि मिलेगी।

अद्यतन: ऊपर दिए गए उत्तर का उद्धरण भ्रामक हो सकता है। यह «एक अपरिभाषित चर» के बजाय, एक अविकसित परिवर्तनीय » कहना चाहिए।

जैसा कि मैंने पाया, रायन ♦ , maerics , और nwellnhof , जब भी किसी समारोह में कोई तर्क प्रदान नहीं किया जाता है, तो तर्कों के लिए इसके चर हमेशा घोषित किए जाते हैं। यह तथ्य नीचे दी गई सूची में पहला आइटम भी गलत साबित करता है।

मेरी समझ से, निम्नलिखित परिदृश्यों का अनुभव किया जा सकता है:

  • फ़ंक्शन को कोई तर्क नहीं दिया गया था, इस प्रकार data एक अपरिभाषित चर बना दिया गया था, और data != null पर एक त्रुटि बढ़ रही थी data != null

  • फ़ंक्शन को विशेष रूप से null (या undefined ) के साथ कहा जाता है, इसकी तर्क के रूप में, किस मामले में data != null पहले से ही आंतरिक कोड, प्रतिपादन && data !== undefined रक्षा करता है && data !== undefined बेकार।

  • फ़ंक्शन को गैर-शून्य तर्क के साथ बुलाया गया था, इस मामले में यह दोनों data != null को तुच्छ रूप से पारित करेगा data != null और data !== undefined

प्रश्न: क्या मेरी समझ सही है?

मैंने फ़ायरफ़ॉक्स के कंसोल में निम्नलिखित की कोशिश की है:

--
[15:31:31.057] false != null
[15:31:31.061] true
--
[15:31:37.985] false !== undefined
[15:31:37.989] true
--
[15:32:59.934] null != null
[15:32:59.937] false
--
[15:33:05.221] undefined != null
[15:33:05.225] false
--
[15:35:12.231] "" != null
[15:35:12.235] true
--
[15:35:19.214] "" !== undefined
[15:35:19.218] true

मैं एक ऐसे मामले को नहीं समझ सकता जहां data !== undefined data != null बाद data !== undefined data != null किसी भी उपयोग का हो सकता है।


एक "अपरिभाषित चर" मान undefined मूल्य से अलग है।

एक अपरिभाषित चर:

var a;
alert(b); // ReferenceError: b is not defined

मूल्य के साथ एक चर undefined :

var a;
alert(a); // Alerts “undefined”

जब कोई फ़ंक्शन तर्क लेता है, तो उस तर्क को हमेशा घोषित किया जाता है भले ही उसका मान undefined , और इसलिए कोई त्रुटि नहीं होगी। आप के बारे में सही हैं != null बाद !== undefined बेकार होने के बावजूद !== undefined


मुझे लगता है कि उन मूल्यों के परीक्षण चर जो आप अपेक्षा नहीं करते हैं, सामान्य रूप से एक अच्छा विचार नहीं है। क्योंकि आपके परीक्षण के रूप में आप वर्जित मूल्यों की एक ब्लैकलिस्ट लिखने के रूप में विचार कर सकते हैं। लेकिन क्या होगा यदि आप सभी वर्जित मूल्यों को सूचीबद्ध करना भूल जाते हैं? कोई भी, आप भी, एक अप्रत्याशित मूल्य पारित करने के साथ अपने कोड को दरकिनार कर सकते हैं। तो एक और उचित दृष्टिकोण श्वेतसूची की तरह कुछ है - केवल अपेक्षित मूल्यों के लिए परीक्षण चर, अप्रत्याशित नहीं। उदाहरण के लिए, यदि आप डेटा मान को स्ट्रिंग होने की अपेक्षा करते हैं, तो इसके बजाय:

function (data) {
  if (data != null && data !== undefined) {
    // some code here
    // but what if data === false?
    // or data === '' - empty string?
  }
}

ऐसा कुछ करो:

function (data) {
  if (typeof data === 'string' && data.length) {
    // consume string here, it is here for sure
    // cleaner, it is obvious what type you expect
    // safer, less error prone due to implicit coercion
  } 
}

typeof foo === "undefined" foo === undefined से अलग है, foo === undefined , उन्हें कभी भ्रमित न करें। typeof foo === "undefined" वह है जिसे आपको वास्तव में चाहिए। इसके अलावा, !== के स्थान पर !=

तो कथन के रूप में लिखा जा सकता है

function (data) {
  if (typeof data !== "undefined" && data !== null) {
    // some code here
  }
}

संपादित करें:

आप foo === undefined को अविकसित चर के लिए foo === undefined नहीं कर सकते हैं।

var t1;

if(typeof t1 === "undefined")
{
  alert("cp1");
}

if(t1 === undefined)
{
  alert("cp2");
}

if(typeof t2 === "undefined")
{
  alert("cp3");
}

if(t2 === undefined) // fails as t2 is never declared
{
  alert("cp4");
}

var a;
alert(a); //Value is undefined

var b = "Volvo"; 
alert(b); //Value is Volvo

var c = null;
alert(c); //Value is null




null-check