[javascript] जावास्क्रिप्ट चेक अगर चर मौजूद है (परिभाषित / आरम्भिक)



Answers

typeof ऑपरेटर की जांच करेगी कि चर वास्तव में अनिर्धारित है या नहीं।

if (typeof variable === 'undefined') {
    // variable is undefined
}

ऑपरेटर के प्रकार, अन्य ऑपरेटरों के विपरीत, एक संदर्भएर्रर अपवाद नहीं फेंकता है जब एक अघोषित चर के साथ प्रयोग किया जाता है

हालांकि, ध्यान रखें कि typeof null "object" वापस आएगा हमें एक चर को null करने की गलती से बचने के लिए सावधान रहना होगा। सुरक्षित होने के लिए, यह इसके बदले हम इसका इस्तेमाल कर सकते हैं:

if (typeof variable === 'undefined' || variable === null) {
    // variable is undefined or null
}

सरल समानता == बजाय सख्त तुलना === का उपयोग करने के बारे में अधिक जानकारी के लिए, देखें:
जो ऑपरेटर के बराबर है (== बनाम ===) का उपयोग जावास्क्रिप्ट तुलना में किया जाना चाहिए?

Question

जाँचने की कौन सी विधि है कि कोई चर आरंभिक रूप से शुरू किया गया है, तो क्या यह सही है / सही है? (मानते हुए कि चर कुछ भी धारण कर सकता है (स्ट्रिंग, इंट, ऑब्जेक्ट, फंक्शन, इत्यादि))

if (elem) { // or !elem

या

if (typeof(elem) !== 'undefined') {

या

if (elem != null) {



यदि आप निश्चित ब्लॉक को कुछ करने के लिए चाहते हैं तो इसका उपयोग करें

if (typeof variable !== 'undefined') {
    // the variable is defined
}

यदि आप अपरिभाषित ब्लॉक कुछ करना चाहते हैं या असाइन या चर को परिभाषित करते हैं, तो इसका उपयोग करें

if (typeof variable === 'undefined') {
    // the variable is undefined
}



मैं इसे ऊपर के उत्तरों में नहीं देख सकता, इसलिए मैं इसे यहाँ सुझाऊंगा, मुझे लगता है

function isDefined(x) { return !!x }

if( isDefined(x) ) {
    //The variable is defined
}

! x सही iff x या तो रिक्त या अपरिभाषित है , तो वापस आता होगा, तो x केवल सच iff x न तो अनिर्धारित है और न ही नहीं लौटाएगा।

मुझे पता है कि यह भी अशक्त मामले के लिए है, लेकिन यहाँ इस बारे में उचित चेतावनी है




if (typeof console != "undefined") {    
   ...
}

या और अच्छा

if ((typeof console == "object") && (typeof console.profile == "function")) {    
   console.profile(f.constructor);    
}

सभी ब्राउज़रों में काम करता है




अधिकांश मामलों में आप उपयोग करेंगे:

elem != null

सरल if (elem) विपरीत, यह 0 , false , NaN और '' अनुमति देता है, लेकिन इसे null या undefined अस्वीकार कर देता है, जिससे यह एक तर्क की उपस्थिति, या किसी वस्तु की संपत्ति के लिए एक अच्छा, सामान्य परीक्षण करता है।

अन्य चेक या तो गलत नहीं हैं, उनके पास अलग-अलग उपयोग हैं:

  • if (elem) : यदि elem को एक वस्तु होने की गारंटी है, या यदि false , 0 , आदि को "डिफ़ॉल्ट" मान माना जाता है (इसलिए undefined या null बराबर)।

  • typeof elem == 'undefined' उन मामलों में इस्तेमाल किया जा सकता है जहां एक निर्दिष्ट null का एक typeof elem == 'undefined' वैरिएबल या प्रॉपर्टी के लिए एक अलग अर्थ है।

    • यह एकमात्र जांच है कि यदि elem को घोषित नहीं किया गया है तो कोई त्रुटि नहीं elem (अर्थात कोई अन्य विवरण नहीं, window संपत्ति नहीं, फ़ंक्शन तर्क नहीं है)। यह मेरी राय में है, बल्कि खतरनाक है क्योंकि यह टाइपो को किसी का ध्यान न ले जाने की अनुमति देता है। इस से बचने के लिए, नीचे विधि देखें

इसके अलावा undefined खिलाफ एक सख्त तुलना है:

if (elem === undefined) ...

हालांकि, क्योंकि ग्लोबल undefined किसी दूसरे मूल्य के साथ ओवरराइड किया जा सकता है, मौजूदा undefined में इसका उपयोग करने से पहले undefined चर को घोषित करना सबसे अच्छा है:

var undefined; // really undefined
if (elem === undefined) ...

या:

(function (undefined) {
    if (elem === undefined) ...
})();

इस पद्धति का एक माध्यमिक लाभ यह है कि जेएस मिनिफ़ायर undefined चर को एक अक्षर में कम कर सकते हैं, हर बार आपको कुछ बाइट्स बचत कर सकते हैं।




अपरिभाषित, बूलियन, स्ट्रिंग, संख्या, समारोह

if( typeof foo !== 'undefined' ) { 

}

वस्तु, सरणी

if( foo instanceof Array ) { 

}



यह स्थिति पर निर्भर करता है। यदि आप कुछ ऐसे चीजों की जांच कर रहे हैं जो संभवत: आपके कोड के बाहर विश्व स्तर पर निर्धारित किए गए हों (जैसे कि शायद jQuery) तो आप चाहते हैं:

if (typeof(jQuery) != "undefined")

(वहाँ सख्त समानता की कोई ज़रूरत नहीं, प्रकार हमेशा हमेशा एक स्ट्रिंग देता है।) लेकिन अगर आपके पास किसी ऐसे फ़ंक्शन पर तर्क है जो हो सकता है या नहीं हो सकता है, तो वे हमेशा परिभाषित होंगे, लेकिन छोड़े गए हैं।

function sayHello(name) {
    if (name) return "Hello, " + name;
    else return "Hello unknown person";
}
sayHello(); // => "Hello unknown person"



जांचें कि क्या कोई ऑब्जेक्ट hasOwnProperty()

उत्तर के typeof के hasOwnProperty() के लिए विकल्प, hasOwnProperty() का उपयोग होता है, जो निश्चित रूप से जांच करता है कि यदि कोई ऑब्जेक्ट (जे.एस. में बहुत कुछ है) की कोई संपत्ति है तो एक वैरिएबल (अन्य चीजों के बीच)।

hasOwnProperty() विधि एक बूलियन देता है जो इंगित करती है कि ऑब्जेक्ट की निर्दिष्ट संपत्ति खुद के (वंशानुगत नहीं) संपत्ति के रूप में है या नहीं।

ऑब्जेक्ट से उतरे प्रत्येक ऑब्जेक्ट hasOwnProperty() विधि को प्राप्त करता है। यह विधि यह निर्धारित करने के लिए इस्तेमाल की जा सकती है कि क्या किसी ऑब्जेक्ट को विशिष्ट ऑब्जेक्ट की प्रत्यक्ष संपत्ति के रूप में निर्दिष्ट संपत्ति है; ऑपरेटर के विपरीत, यह विधि ऑब्जेक्ट की प्रोटोटाइप श्रृंखला को नहीं जांचती है।

// Globally established (therefore) properties of window
var foo = "whatever", // string
    bar = false,      // bool
    baz;              // undefined
// window.qux does not exist

console.log( [
    window.hasOwnProperty( "foo" ),             // true
    window.hasOwnProperty( "bar" ),             // true
    window.hasOwnProperty( "baz" ),             // true
    window.hasOwnProperty( "qux" ),             // false
    { foo: [], bar: 0 }.hasOwnProperty( "bar" ) // true
] );

hasOwnProperty() बारे में बहुत अच्छी बात यह है कि इसे बुलाते hasOwnProperty() , हम उस चर का उपयोग नहीं करते हैं जो कि अभी तक अपरिभाषित हो सकता है - जो निश्चित रूप से पहली जगह में आधी समस्या है

यद्यपि कभी भी आदर्श या आदर्श समाधान नहीं, कुछ परिस्थितियों में, यह सिर्फ नौकरी है!




यह जाँचने के लिए कि क्या एक वेरिएबल घोषित / सेट किया गया है, मैंने इस गंदे चाल को किया है।

मुझे एक समारोह में कोड निकालने का कोई तरीका नहीं मिला है, यहां तक ​​कि eval साथ भी।

"use strict";

// var someVar;

var declared;
try {
  someVar;
  declared = true;
} catch(e) {
  declared = false;
}

if (declared) {
  console.log("someVar is declared; now has the value: " + someVar);
} else {
  console.log("someVar is not declared");
}



नल जावास्क्रिप्ट में एक मान है और typeof null रिटर्न की "object" typeof null

इसलिए, यदि आप शून्य मूल्यों को पारित करते हैं तो स्वीकृत उत्तर काम नहीं करेगा। यदि आप शून्य मानों को पास करते हैं, तो आपको शून्य मानों के लिए अतिरिक्त चेक जोड़ना होगा:

if ((typeof variable !== "undefined") && (variable !== null))  
{
   // the variable is defined and not null
}



प्रश्न में उल्लिखित विशेष स्थिति में,

typeof window.console === "undefined"

समान है

window.console === undefined

मैं बाद की पसंद करता हूं क्योंकि यह छोटा है।

कृपया ध्यान दें कि हम केवल वैश्विक दायरे में console (जो कि सभी ब्राउज़रों में एक window ऑब्जेक्ट है) के लिए देखते हैं। इस विशेष स्थिति में यह वांछनीय है। हम console कहीं और निर्धारित नहीं करना चाहते हैं

@ ब्रेन केली अपने महान उत्तर में तकनीकी विवरण बताते हैं। मैंने केवल निष्कर्ष की कमी की है और इसे पढ़ने के लिए कुछ आसान में पचा।




मैं ऑब्जेक्ट के आधार पर दो अलग-अलग तरीकों का उपयोग करता हूं।

if( !variable ){
  // variable is either
  // 1. empty string i.e. '';
  // 2. Integer 0;
  // 3. undefined;
  // 4. null;
}

कभी-कभी मैं झूठ के रूप में एक खाली स्ट्रिंग का मूल्यांकन नहीं करना चाहता, इसलिए मैं इस केस का उपयोग करता हूं

function invalid( item ){
  return (item === undefined || item === null);
}

if( invalid( variable )){
  // only here if null or undefined;
}

यदि आपको इसके विपरीत की आवश्यकता है, तो पहले उदाहरण में! चर हो जाता है !! चर, और अमान्य फ़ंक्शन === बन गया! = और फ़ंक्शन के नाम में परिवर्तन नहींअवैध।




सबसे मजबूत 'यह परिभाषित किया गया है' चेक प्रकार के साथ है

if (typeof elem === 'undefined')

अगर आप एक डिफाल्ट को निर्धारित करने के लिए केवल एक परिभाषित चर की जाँच कर रहे हैं, तो एक लाइनर पढ़ने में आसानी के लिए आप अक्सर यह कर सकते हैं:

elem = elem || defaultElem;

यह अक्सर उपयोग करने के लिए ठीक है, देखें: जावास्क्रिप्ट में डिफ़ॉल्ट मान सेट करने के लिए रवैयात्मक तरीका

इस प्रकार एक लाइनर का उपयोग कीवर्ड के प्रकार:

elem = (typeof elem === 'undefined') ? defaultElem : elem;



कई मामलों में, इसका उपयोग करते हुए:

if (elem) { // or !elem

आपके लिए नौकरी करेंगे ... ये निम्न मामलों की जांच करेगा:

  1. अनिर्धारित : यदि मूल्य परिभाषित नहीं है और यह undefined
  2. रिक्त : यदि यह रिक्त है, उदाहरण के लिए यदि कोई DOM तत्व मौजूद नहीं है ...
  3. खाली स्ट्रिंग : ''
  4. 0 : नंबर शून्य
  5. नाएन : नंबर नहीं
  6. असत्य

तो यह सभी प्रकार के मामलों को कवर करेगा, लेकिन हमेशा अजीब मामलों में हम भी कवर करना चाहते हैं, उदाहरण के लिए रिक्त स्थान के साथ एक स्ट्रिंग, जैसे कि ' ' , यह जावास्क्रिप्ट में परिभाषित किया जाएगा क्योंकि इसमें स्ट्रिंग्स के अंदर रिक्त स्थान है। .. उदाहरण के लिए, इस मामले में आप ट्रिम () का उपयोग करके एक और जांच जोड़ते हैं, जैसे:

if(elem) {

if(typeof elem === 'string' && elem.trim()) {
///

मैं इस जवाब का त्वरित संक्षिप्त विवरण दिखाने के लिए भी नीचे की छवि बना रहा हूं:






Links