मैं जावास्क्रिप्ट में खाली / अपरिभाषित / अशक्त स्ट्रिंग के लिए कैसे जांच कर सकता हूं?


2848

मैंने यह प्रश्न देखा , लेकिन मैंने एक जावास्क्रिप्ट विशिष्ट उदाहरण नहीं देखा। क्या string.Emptyजावास्क्रिप्ट में एक सरल उपलब्ध है, या यह सिर्फ जांच का मामला है ""?


2
सिर्फ FYI करें, मुझे लगता है कि स्ट्रिंग क्लास के लिए सबसे उपयोगी API मोज़िला और जावास्क्रिप्ट किट में हैं । [elated.com] ( elated.com/articles/working-with-strings ) स्ट्रिंग के सभी गुणों, विधियों पर एक ट्यूटोरियल है ... कृपया ध्यान दें: Mozilla लिंक को डेवलपर.
जीन टी

इसे एक बार देखें: stackoverflow.com/a/36491147/7026966
हिमांशु शेखर

यदि आवश्यकता स्पष्ट रूप से निर्दिष्ट की गई थी, तो यह बहुत मदद करेगा। किन मूल्यों के लिए ईएमपी खाली होना चाहिए ? "" के लिए जाँच कर रहा है कि यह केवल तभी लौटना चाहिए जब मान टाइप स्ट्रिंग और लंबाई ० है। यहाँ बहुत से उत्तर मानते हैं कि यह कुछ या सभी गलत मूल्यों के लिए भी सही होना चाहिए।
रॉबग

जवाबों:


3563

यदि आप यह जांचना चाहते हैं कि क्या कोई मूल्य है, तो आप कर सकते हैं

if (strValue) {
    //do something
}

यदि आपको विशेष रूप से रिक्त स्ट्रिंग के लिए नल से अधिक की जांच करने की आवश्यकता है, तो मुझे लगता ""है कि ===ऑपरेटर के उपयोग से जाँच करना आपके लिए सबसे अच्छा शर्त है (ताकि आपको पता चले कि यह वास्तव में, एक स्ट्रिंग है जिसकी आप तुलना कर रहे हैं)।

if (strValue === "") {
    //...
}

173
लंबाई की संपत्ति का परीक्षण वास्तव में "" के खिलाफ स्ट्रिंग का परीक्षण करने से तेज हो सकता है, क्योंकि दुभाषिया को स्ट्रिंग शाब्दिक से स्ट्रिंग ऑब्जेक्ट बनाने की आवश्यकता नहीं होगी।
विंसेंट रॉबर्ट

24
क्रोम डेवलपर टूल्स में कुछ भोली-भाली प्रोफाइलिंग करते हुए, परीक्षण === ''बनाम .lengthकोई भी सुधार नहीं दिखा (और .lengthकेवल काम का उपयोग करके यदि आप मान सकते हैं कि आपके पास एक स्ट्रिंग है)
bdukes

26
@bdukes जब आप उस तरह की सूक्ष्म-अनुकूलन के बारे में देखभाल करना शुरू करते हैं, तो मुझे नहीं लगता कि क्रोम वह ब्राउज़र है जहां आपको अपनी अधिकांश प्रदर्शन समस्याएं हो रही हैं ...
विंसेंट रॉबर्ट

15
बस ध्यान दें, यदि "खाली स्ट्रिंग" की आपकी परिभाषा में व्हॉट्सएप शामिल है, तो यह समाधान उचित नहीं है। 1 या अधिक रिक्त स्थान की एक स्ट्रिंग ऊपर सच है। यदि आप JQuery का उपयोग कर रहे हैं, तो आप इसका उपयोग कर सकते हैं: if ($ .trim (Ref) .length === 0) - एक समान प्रश्न के इस उत्तर के अनुसार: stackoverflow.com/questions/2031085/…
CodeClimite

115
जैसा कि अपेक्षित .length > 0है वास्तव में एक स्ट्रिंग शाब्दिक की तुलना में बहुत तेज है! इस jsPerf की
चाड

1127

यह जांचने के लिए कि क्या कोई स्ट्रिंग खाली है, अशक्त या अपरिभाषित है मैं उपयोग करता हूं:

function isEmpty(str) {
    return (!str || 0 === str.length);
}

यह जांचने के लिए कि क्या कोई स्ट्रिंग रिक्त है, अशक्त या अपरिभाषित है मैं उपयोग करता हूं:

function isBlank(str) {
    return (!str || /^\s*$/.test(str));
}

यह जाँचने के लिए कि क्या कोई स्ट्रिंग रिक्त है या केवल श्वेत-स्थान है:

String.prototype.isEmpty = function() {
    return (this.length === 0 || !this.trim());
};

21
क्यों 0 === str.length के बजाय str.length === 0?
विंसेंट

66
@Vincent शर्तें अक्सर इस तरह लिखी जाती हैं if (variable == constant value)और यदि आप '=' भूल जाते हैं, तो आप परीक्षण के बजाय चर को निरंतर मान दे रहे हैं। कोड तब भी काम करेगा जब आप एक में चर को असाइन कर सकते हैं। तो इस स्थिति को लिखने का एक सुरक्षित तरीका निरंतर मूल्य और चर को उलटना है। इस तरह जब आप अपने कोड का परीक्षण करते हैं तो आपको एक त्रुटि दिखाई देगी (असाइनमेंट में अमान्य लेफ़-हैंड साइड)। आप शर्तों में असाइनमेंट को अस्वीकार करने और जब आप एक लिखते हैं तो चेतावनी दी जा सकती है।
फ्लोरीयन

2
शर्म की बात है कि /^\s*$/.test(str)वास्तव में पठनीय नहीं है - शायद सरल कोड या रेगेक्स का उपयोग करके रिक्त स्थान को हटाना बेहतर होगा? देखें stackoverflow.com/questions/6623231/… और इसके अलावा stackoverflow.com/questions/10800355/…
Adrien Be

6
/^\s*$/.test(str) को str.trim () के साथ बदला जा सकता है। (लंबाई) === 0
Schadenfreude

21
@Vincent को "Yoda conditions" भी कहा जाता है, जैसे if blue is the skyDodgycoder.net/2011/11/yoda-conditions-pokemon-exception.html
AZ

316

पिछले सभी उत्तर अच्छे हैं, लेकिन यह और भी बेहतर होगा। !!( नहीं ) ऑपरेटर का उपयोग करें ।

if(!!str){
    // Some code here
}

या टाइप कास्टिंग का उपयोग करें:

if(Boolean(str)){
    // Code here
}

दोनों एक ही कार्य करते हैं। चर को बुलियन में टाइप करें, जहां strएक चर है।
इसके लिए लौटता falseहै null,undefined,0,000,"",false
यह trueस्ट्रिंग "0" और व्हॉट्सएप "" पर लौटता है ।


61
यह "और भी बेहतर" क्यों है?
मेने

33
if(str)और के व्यवहार में कोई अंतर है if(!!str)?
पीटर ओल्सन

6
@PeterOlson यदि आप एक बूलियन के रूप में एक चर को बचाने की कोशिश कर रहे हैं जो सामग्री के लिए कई तारों की जांच करता है तो आप ऐसा करना चाहते हैं .. उर्फ var any = (!!str1 && !!str2 && !!str3)हैंडलिंग अगर वहाँ भी एक संख्या है
जॉन रूडेल

23
यह वह उपाय है जिसका मैं हमेशा उपयोग करता हूं। !!str.trim()यह सुनिश्चित करने के लिए कि स्ट्रिंग केवल व्हाट्सएप से नहीं बनी है।
डारियो ओडेनिनो

5
हैक की तरह नहीं दिखता है, Boolean(str)बहुत अधिक पठनीय और कम "wtfish" है।
शिंज़ौ

105

निकटतम चीज़ जो आप प्राप्त कर सकते हैं str.Empty(पूर्व शर्त के साथ कि स्ट्रिंग एक स्ट्रिंग है) है:

if (!str.length) { ...

8
ऐसा नहीं है कि एक अपवाद है str है शून्य है?
Pic मिकेल

3
@PicMickael हाँ! तो होगा str.Empty
एतस गोरल

99

यदि आपको यह सुनिश्चित करने की आवश्यकता है कि स्ट्रिंग केवल रिक्त स्थानों का एक गुच्छा नहीं है (मैं यह मान रहा हूं कि यह फॉर्म सत्यापन के लिए है) आपको रिक्त स्थान पर एक प्रतिस्थापन करने की आवश्यकता है।

if(str.replace(/\s/g,"") == ""){
}

8
लेकिन क्या काम करता है अगर आप वास्तव में परीक्षण करना चाहते हैं तो गैर-अंतरिक्ष सामग्री के साथ एक स्ट्रिंग है। क्या यह परीक्षण करने का एक कम-महंगा तरीका है?
फ्लैश

4
लंबाई की संपत्ति के बारे में कैसे?
13

27
सभी रिक्त स्थान को हटाने के बजाय, यदि कोई गैर-स्थान है, तो क्यों न जांचें? 2 फायदे हैं कि अगर यह एक गैर-अंतरिक्ष चरित्र है, तो यह जल्दी से बाहर निकल सकता है, और इसमें एक नया स्ट्रिंग नहीं है जिसे आप फिर से जांचते हैं। if(str.match(/\S/g)){}
मपेन

34
@ मार्क FYI करें, आपको वैश्विक संशोधक की आवश्यकता नहीं होगी, क्योंकि एक गैर-अंतरिक्ष चरित्र की पहली घटना का मतलब होगा कि स्ट्रिंग खाली नहीं है:str.match(/\S/)
neezer

1
यह महंगा क्यों है? यदि वास्तव में है, तो jQuery इस विधि का उपयोग क्यों करता है? आप इसे jQuery के स्रोतvar trimLeft = /^\s+/, trimRight = /\s+$/;
मिरेकी

66

मैं उपयोग करता हूं:

function empty(e) {
  switch (e) {
    case "":
    case 0:
    case "0":
    case null:
    case false:
    case typeof(e) == "undefined":
      return true;
    default:
      return false;
  }
}

empty(null) // true
empty(0) // true
empty(7) // false
empty("") // true
empty((function() {
    return ""
})) // false

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

2
मैं और भी आगे जाऊँगा, और अपरिभाषित मामले के लिए इसे === ऑपरेटर के साथ कील करूँगा। अन्यथा यह सिर्फ सही जवाब है।
xarlymg89

typeofमें switchमेरे लिए काम नहीं किया। मैंने एक if (typeof e == "undefined")परीक्षण जोड़ा और वह काम करता है। क्यों?
लुकास

1
@ लुकास क्योंकि यह एक टाइपो या एक निरीक्षण था। आपका संशोधन सही तरीका है। (मूल खाली फ़ंक्शन के संदर्भ को संदर्भित करता है, ई पैरामीटर नहीं, जो कि फ़ंक्शन को जांचना माना जाता है)
मधुमक्खी

क्या हम case undefined:इसके बजाय उपयोग कर सकते हैं case typeof(e) == "undefined":?
बोरिस जे।

43

आप लॉश का उपयोग कर सकते हैं : _.isEmpty (मान)।

ऐसा लगता है कि मामलों का एक बहुत शामिल किया गया है {}, '', null, undefined, आदि

लेकिन यह हमेशा रिटर्न trueके लिए Numberके प्रकार जावास्क्रिप्ट आदिम डेटा प्रकार की तरह _.isEmpty(10)या _.isEmpty(Number.MAX_VALUE)दोनों रिटर्न true


_.isEmpty(" "); // => false
एरिक

1
@ समृद्ध क्योंकि " "खाली नहीं है। _.isEmpty("");सच लौटाता है।
मोशी

1
यह सच है - मैंने इसका उल्लेख किया है क्योंकि यहाँ पर कुछ अन्य जवाबों के सत्यापन और जाँच से पता चलता है कि क्या एक स्ट्रिंग में केवल व्हाट्सएप है, और यह एकल लॉश फ़ंक्शन उस समस्या को हल नहीं करेगा।
एरच

@ समृद्ध, अब मुझे आपकी बात मिल गई, उल्लेख करने के लिए धन्यवाद।
मोशी

36

समारोह:

function is_empty(x)
{
    return (
        (typeof x == 'undefined')
                    ||
        (x == null)
                    ||
        (x == false)  //same as: !x
                    ||
        (x.length == 0)
                    ||
        (x == "")
                    ||
        (x.replace(/\s/g,"") == "")
                    ||
        (!/[^\s]/.test(x))
                    ||
        (/^\s*$/.test(x))
    );
}

पुनश्च: जावास्क्रिप्ट में, लाइन ब्रेक के बाद का उपयोग न करें return;


1
कोई भी मौका आप बता सकते हैं कि प्रत्येक चेक क्या कर रहा है? :)
दानवी

2
-1 वे अलग-अलग चीजों के लिए परीक्षण कर रहे हैं। यह उन सभी को एक ifबयान में रखने के लिए कोई मतलब नहीं है ।
बेनेट McElwee

1
टाइपऑफ़ MyVariable == 'अपरिभाषित' एक अपरिभाषित मूल्य और एक अघोषित चर के साथ एक प्रारंभिक चर के बीच विचार नहीं करता है जब तक कि चर को शुरू में घोषित नहीं किया गया था और शून्य करने के लिए प्रारंभ किया गया था। लंबाई की संपत्ति की जांच करने से स्ट्रिंग आदिम को स्ट्रिंग ऑब्जेक्ट में लपेटा जाता है।
स्कॉट मार्कस

35

प्रयत्न:

if (str && str.trim().length) {  
    //...
}

2
क्या लंबाई संपत्ति आवश्यक है?
मेंढक संख्या

str.trim().lengthstr.trim()अपने स्वयं के परीक्षण के परिणाम के अनुसार, लगभग 1% से अधिक तेज़ी से करेगा ।
देविल्लत

2
@ देविल्डेल्टा - आपका 1% आपके परीक्षण में त्रुटि है।
स्टीफन एम इरविंग

ओपी खाली स्ट्रिंग, अपरिभाषित या अशक्त के लिए परीक्षण करना चाहता है। यह एक स्ट्रिंग के लिए परीक्षण कर रहा है जो उन स्थितियों में से कोई भी नहीं है। उन्होंने व्हाट्सएप के बारे में कुछ भी नहीं कहा केवल तार। आप ओपी की स्थितियों का परीक्षण इस तरह से कर सकते हैं, जब तक आप सुनिश्चित हैं कि कोई अन्य डेटा प्रकार चर में संग्रहीत नहीं किया जाता है: if (!str) { ... }
स्टीफन एम इरविंग

34
var s; // undefined
var s = ""; // ""
s.length // 0

जावास्क्रिप्ट में एक खाली स्ट्रिंग का प्रतिनिधित्व करने के लिए कुछ भी नहीं है। या तो के खिलाफ एक जाँच करें length(यदि आप जानते हैं कि संस्करण हमेशा एक स्ट्रिंग होगा) या के खिलाफ""


29

मैं सबसे कुशल विधि के बारे में बहुत ज्यादा चिंता नहीं करूंगा । अपने इरादे के लिए सबसे स्पष्ट है का उपयोग करें। मेरे लिए यह आमतौर पर हैstrVar == ""

कॉन्स्टेंटिन की टिप्पणी के अनुसार , अगर strVar कुछ ऐसा कर सकता है जिसमें पूर्णांक 0 मान शामिल हो, तो यह वास्तव में उन इरादों को स्पष्ट करने वाली स्थितियों में से एक होगा।


11
बुरा विचार। आप सही हो जाएगा अगर strVar गलती से सौंपा गया है 0.
Constantin

5
मैं मानता हूं कि किसी भी माइक्रो-ऑप्टिमाइजेशन की तुलना में आपका इरादा स्पष्ट होना अधिक महत्वपूर्ण है, अन्य तरीकों से उपज हो सकती है, लेकिन सख्त तुलना ऑपरेटर का उपयोग ===करना बेहतर होगा। strVarखाली स्ट्रिंग होने पर ही यह सही होता है।
बेकार कोड

यदि अपरिभाषित है तो चेक विफल हो जाता है। तो अगर (str) बेहतर काम करता है
वैलेंटाइन हेनिट्ज

3
@ValentinHeinitz अगर str को 0 या "0" का एक गलत मूल्य दिया गया था, अगर (str) गलत तरीके से रिपोर्ट सही होगी। सबसे अच्छा तरीका है अगर (str === "")। यह सरल है और यह कभी असफल नहीं होगा।
स्कॉट मार्कस


20

बहुत सारे उत्तर, और बहुत सारी संभावनाएं!

विजेता के त्वरित और सरल कार्यान्वयन के लिए संदेह के बिना: if (!str.length) {...}

हालाँकि, अन्य कई उदाहरण उपलब्ध हैं। इस बारे में जाने के लिए सबसे अच्छा कार्यात्मक तरीका, मैं सुझाव दूंगा:

function empty(str)
{
    if (typeof str == 'undefined' || !str || str.length === 0 || str === "" || !/[^\s]/.test(str) || /^\s*$/.test(str) || str.replace(/\s/g,"") === "")
    {
        return true;
    }
    else
    {
        return false;
    }
}

थोड़ा बहुत, मुझे पता है।


2
अपरिभाषित के लिए जाँच करने के लिए जाँच में पहले ले जाया जाना चाहिए, या अपरिभाषित आइटम पहले की जाँच पर अपवाद फेंक देंगे।
SvdSinner

पूरी तरह से सहमत हूँ! अच्छा पकड़ा। मैं अपने उपरोक्त उत्तर को संपादित करूंगा!
tfont

str.length === 0किसी भी फ़ंक्शन के लिए सही है जो कोई औपचारिक पैरामीटर नहीं है।
रॉब

20

आप नियमित अभिव्यक्तियों के साथ भी जा सकते हैं:

if((/^\s*$/).test(str)) { }

उन तारों की जाँच करें जो या तो खाली हैं या व्हॉट्सएप से भरे हैं।


यह काम करता है, लेकिन यह बहुत महंगा महंगा वार है। अच्छा है अगर आप सिर्फ एक या दो चीजों की जांच करना चाहते हैं, न कि बड़े सेट की।
ऑर्फियस

19
  1. जाँच करें कि var a;मौजूद हैं
  2. false spacesमूल्य में ट्रिम करें , फिर परीक्षण करेंemptiness

    if ((a)&&(a.trim()!=''))
    {
      // if variable a is not empty do this 
    }

18

प्रदर्शन

मैं 18 चुने हुए समाधानों के लिए macOS v10.13.6 (हाई सिएरा) पर परीक्षण करता हूं । समाधान थोड़ा अलग है (कोने-केस इनपुट डेटा के लिए) जो नीचे दिए गए स्निपेट में प्रस्तुत किया गया था।

निष्कर्ष

  • सरल समाधान आधारित पर !str, ==, ===और lengthसभी ब्राउज़रों के लिए तेजी से कर रहे हैं (ए, बी, सी, जी, आई, जे)
  • नियमित अभिव्यक्ति ( test, replace) पर आधारित समाधान और charAtसभी ब्राउज़रों (एच, एल, एम, पी) के लिए सबसे धीमे हैं।
  • सबसे तेज़ गति के रूप में चिह्नित समाधान केवल एक टेस्ट रन के लिए सबसे तेज़ था - लेकिन कई रनों में यह 'तेज़' समाधान समूह के अंदर बदल जाता है

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

विवरण

नीचे दिए गए स्निपेट में मैं विभिन्न इनपुट मापदंडों का उपयोग करके चुने हुए 18 तरीकों के परिणामों की तुलना करता हूं

  • "" "a" " "- रिक्त स्ट्रिंग, अक्षर के साथ स्ट्रिंग और अंतरिक्ष के साथ स्ट्रिंग
  • [] {} f- सरणी, वस्तु और कार्य
  • 0 1 NaN Infinity - संख्या
  • true false - बुलियन
  • null undefined

सभी परीक्षण किए गए तरीके सभी इनपुट मामलों का समर्थन नहीं करते हैं।

और फिर सभी तरीकों के लिए मैं str = ""ब्राउज़र क्रोम v78.0.0, सफारी v13.0.4, और फ़ायरफ़ॉक्स v71.0.0 के लिए स्पीड टेस्ट केस करता हूं - आप यहां अपनी मशीन पर परीक्षण चला सकते हैं

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


यह वास्तव में बहुत बढ़िया है! मुझे यह सब देखकर बहुत अच्छा लगा! धन्यवाद!
वेबवंडर

यह पूरी तरह से अध्ययन है - धन्यवाद
दीया

17

इसके अलावा, यदि आप व्हाट्सएप से भरे स्ट्रिंग को "खाली" मानते हैं।

आप इस नियमित अभिव्यक्ति के साथ इसका परीक्षण कर सकते हैं:

!/\S/.test(string); // Returns true if blank.

14

मैं आमतौर पर कुछ इस तरह का उपयोग करता हूं,

if (!str.length) {
    // Do something
}

3
सबसे तेज़ अगर आप जानते हैं कि चर एक स्ट्रिंग है। चर अपरिभाषित है, तो एक त्रुटि फेंकता है।
एड्रियन होप-बेली

@ AdrianHope-Bailie आप एक अपरिभाषित चर का परीक्षण क्यों करेंगे?
अबिमेल मार्टेल

2
@AbimaelMartell क्यों नहीं? आपके पास एक चर है जिसे आपने या तो घोषित किया था या जो आपको कुछ दायरे से पारित किया गया था, जैसे कि किसी विधि या एपीआई कॉल से प्रतिक्रिया में आपके पास कोई नियंत्रण नहीं है। आप मान सकते हैं कि इसमें एक मान है और ऊपर दिए गए चेक का उपयोग करें लेकिन यदि यह परिभाषित नहीं है या अशक्त है तो आपको एक त्रुटि मिलेगी। var परीक्षण = अशक्त; अगर (परीक्षण.लॉन्ग) {अलर्ट ("एड्रियन गलत है");}
एड्रियन होप-बेली

ओपी "एक खाली स्ट्रिंग की जांच कैसे करें" के लिए पूछ रहा था, अपरिभाषित चर एक खाली स्ट्रिंग नहीं है। वैसे भी आप typeof variable != "undefined"खाली होने से पहले जांच सकते हैं ।
अबिमेल मार्टेल

10

मैंने एक उत्तर पर ध्यान नहीं दिया है जो एक स्ट्रिंग में अशक्त पात्रों की संभावना को ध्यान में रखता है। उदाहरण के लिए, यदि हमारे पास एक अशक्त वर्ण स्ट्रिंग है:

var y = "\0"; // an empty string, but has a null character
(y === "") // false, testing against an empty string does not work
(y.length === 0) // false
(y) // true, this is also not expected
(y.match(/^[\s]*$/)) // false, again not wanted

इसकी अशक्तता का परीक्षण करने के लिए कुछ इस तरह कर सकता है:

String.prototype.isNull = function(){ 
  return Boolean(this.match(/^[\0]*$/)); 
}
...
"\0".isNull() // true

यह एक नल स्ट्रिंग पर और एक रिक्त स्ट्रिंग पर काम करता है और यह सभी तारों के लिए सुलभ है। इसके अलावा, इसे अन्य जावास्क्रिप्ट खाली या व्हाट्सएप वर्ण (यानी नॉनब्रेकिंग स्पेस, बाइट ऑर्डर मार्क, लाइन / पैराग्राफ विभाजक, आदि) से युक्त किया जा सकता है।


2
दिलचस्प विश्लेषण। मुझे नहीं लगता कि यह 99.9% मामलों में प्रासंगिक होगा। लेकिन मैंने हाल ही में पाया कि MySQL एक कॉलम "null" का मूल्यांकन करता है यदि (और केवल यदि) तो उस कॉलम में null वर्ण ("\ 0") हो। दूसरी ओर ओरेकल "\ 0" को अशक्त होने के रूप में मूल्यांकन नहीं करेगा, इसे लंबाई 1 की स्ट्रिंग के रूप में मानना ​​पसंद करेंगे (जहां एक वर्ण अशक्त चरित्र है)। यह ठीक से निपटा नहीं तो भ्रम पैदा कर सकता है, क्योंकि कई वेब-डेवलपर्स बैक-एंड डेटाबेस के साथ काम करते हैं, जो विभिन्न प्रकार के "अशक्त" मूल्यों से गुजर सकते हैं। यह हर डेवलपर के दिमाग के पीछे होना चाहिए।
कार्टिफेफोरस

10

इस बीच हमारा एक कार्य हो सकता है जो अशक्त, अपरिभाषित, '', '', {}, [] जैसे सभी 'खाली' की जाँच करता है । इसलिए मैंने अभी यह लिखा है।

var isEmpty = function(data) {
    if(typeof(data) === 'object'){
        if(JSON.stringify(data) === '{}' || JSON.stringify(data) === '[]'){
            return true;
        }else if(!data){
            return true;
        }
        return false;
    }else if(typeof(data) === 'string'){
        if(!data.trim()){
            return true;
        }
        return false;
    }else if(typeof(data) === 'undefined'){
        return true;
    }else{
        return false;
    }
}

मामलों और परिणामों का उपयोग करें।

console.log(isEmpty()); // true
console.log(isEmpty(null)); // true
console.log(isEmpty('')); // true
console.log(isEmpty('  ')); // true
console.log(isEmpty(undefined)); // true
console.log(isEmpty({})); // true
console.log(isEmpty([])); // true
console.log(isEmpty(0)); // false
console.log(isEmpty('Hey')); // false

10

अब तक स्ट्रिंग की तरह कोई सीधी विधि नहीं है। यह जांचने के लिए कि स्ट्रिंग खाली है या नहीं। लेकिन आपके कोड में आप एक खाली स्ट्रिंग के लिए रैपर चेक का उपयोग कर सकते हैं जैसे:

// considering the variable in which your string is saved is named str.

if (str && str.length>0) { 

  // Your code here which you want to run if the string is not empty.

}

इसका उपयोग करके आप यह भी सुनिश्चित कर सकते हैं कि स्ट्रिंग अपरिभाषित या अशक्त नहीं है। याद रखें, अपरिभाषित, अशक्त और खाली तीन अलग-अलग चीजें हैं।


यह अशक्त या अपरिभाषित कारण पर एक त्रुटि फेंक देगा क्योंकि हमें सीधे एक वैरिएबल पर एक ऑपरेशन नहीं करना चाहिए जो शून्य या अपरिभाषित है - str के लिए जांच अन्य उत्तरों में बताए अनुसार करने से पहले मौजूद है और यह भी ध्यान दें कि यह abc पर काम करेगा = '' लेकिन लेट एबीसी = '' पर नहीं, ये दोनों अलग-अलग हैं।
whoami

गौर करें let rand = ()=>Math.random(), तो rand && rand.length > 0)गलत है, लेकिन स्पष्ट रूप से fn "खाली" नहीं है। यानी यह किसी भी फ़ंक्शन के लिए गलत है, जिसमें कोई प्रारूप पैरामीटर नहीं है।
रॉब

@RobG Math.random()एक नंबर देता है और एक स्ट्रिंग नहीं। और यह उत्तर तार के बारे में है। ;-)
हर्षित अग्रवाल 5

10

ये सभी उत्तर अच्छे हैं।

लेकिन मुझे यकीन नहीं है कि चर एक स्ट्रिंग है, इसमें केवल रिक्त स्थान नहीं हैं (यह मेरे लिए महत्वपूर्ण है), और इसमें '0' (स्ट्रिंग) हो सकता है।

मेरा संस्करण:

function empty(str){
    return !str || !/[^\s]+/.test(str);
}

empty(null); // true
empty(0); // true
empty(7); // false
empty(""); // true
empty("0"); // false
empty("  "); // true

Jsfiddle पर नमूना ।


1
है ना? यदि आप एक स्ट्रिंग की उम्मीद कर रहे हैं, empty(0)और empty(7)उसी मूल्य को वापस करना चाहिए।
बेनेट McElwee

मेरे विशेष मामले में - empty("0")लौटना चाहिए false(क्योंकि यह एक खाली स्ट्रिंग नहीं है), लेकिन empty(0)वापस लौटना चाहिए trueक्योंकि यह खाली है :)
एंड्रॉन

लेकिन 0 खाली नहीं है! यह एक संख्या है, और संख्याएँ पूर्ण या रिक्त नहीं हो सकतीं। बेशक, यह आपका कार्य है और इसलिए आपको अपनी आवश्यकताओं को पूरा करना चाहिए, लेकिन emptyइस मामले में एक भ्रामक नाम है।
बेनेट मैकएलवे

मुझे लगता है कि नाम emptyअच्छा है। खाली फ़ंक्शन के लिए php डॉक्स में : और इस फ़ंक्शन के Returns FALSE if var exists and has a non-empty, non-zero value. Otherwise returns TRUE.बीच का अंतर PHP- उस स्ट्रिंग '0'को खाली के रूप में पहचाना नहीं जाएगा।
एंड्रॉन

जैसा कि मैं कहता हूं, यह आपका कार्य है: जिसे आप चाहते हैं उसे कॉल करें। लेकिन emptyएक गलत और भ्रामक नाम है। यह दिलचस्प है कि PHP का एक खराब-नाम वाला emptyफ़ंक्शन भी है, लेकिन PHP की विफलताओं का जावास्क्रिप्ट के साथ कोई लेना-देना नहीं है।
बेनेट McElwee

10

मुझे यहां एक अच्छा जवाब नहीं मिला (कम से कम ऐसा जवाब नहीं जो मेरे लिए उपयुक्त हो)

इसलिए मैंने खुद को जवाब देने का फैसला किया:

value === undefined || value === null || value === "";

यदि यह अपरिभाषित है तो आपको जाँच शुरू करने की आवश्यकता है। अन्यथा आपकी विधि में विस्फोट हो सकता है, और फिर आप जांच सकते हैं कि यह शून्य के बराबर है या खाली स्ट्रिंग के बराबर है।

आपके पास नहीं हो सकता !! या केवल तभी if(value)से जब आप जाँचते हैं 0कि यह आपको एक गलत उत्तर देने वाला है (0 गलत है)।

उस के साथ, इसे एक विधि में लपेटो जैसे:

public static isEmpty(value: any): boolean { return value === undefined || value === null || value === ""; }

पुनश्च: आपको टाइपोफ़ की जांच करने की आवश्यकता नहीं है , क्योंकि यह विधि में प्रवेश करने से पहले ही फट जाएगा और फेंक देगा


संभवतः बेहतर उपयोग बूलियन (मूल्य) निर्माण जो अपरिभाषित और अशक्त मूल्यों (और 0, -0, गलत, NaN) को भी झूठा मानता है। देखें stackoverflow.com/questions/856324/...
Zhuravlev ए

9

यदि किसी को न केवल खाली बल्कि खाली तारों का भी पता लगाना है, तो मैं गोरल के उत्तर में शामिल करूंगा:

function isEmpty(s){
    return !s.length;    
}

function isBlank(s){
    return isEmpty(s.trim());    
}

8

इसे इस्तेमाल करे

str.value.length == 0

3
"".value.lengthएक त्रुटि का कारण होगा। यह होना चाहिएstr.length === 0
एंडफिशर

यह Trow एक TypeErrorहैं strके बराबर है undefinedयाnull
RousseauAlexandre

8

आप इसे जावास्क्रिप्ट में देशी स्ट्रिंग ऑब्जेक्ट में आसानी से जोड़ सकते हैं और इसे फिर से उपयोग कर सकते हैं ... यदि आप खाली तारों की जांच करना चाहते हैं, तो कोड की तरह कुछ सरल आपके लिए काम कर सकता है :
''

String.prototype.isEmpty = String.prototype.isEmpty || function() {
  return !(!!this.length);
}

अन्यथा यदि आप ''रिक्त स्ट्रिंग और ' 'स्थान दोनों की जांच करना चाहते हैं, तो आप ऐसा कर सकते हैं trim(), बस नीचे दिए गए कोड की तरह कुछ जोड़कर :

String.prototype.isEmpty = String.prototype.isEmpty || function() {
   return !(!!this.trim().length);
}

और आप इसे इस तरह से कॉल कर सकते हैं:

''.isEmpty(); //return true
'alireza'.isEmpty(); //return false

!(!!this.length)केवल !this(या !this.trim()दूसरे विकल्प के लिए) करने के बजाय क्या लाभ है ? एक शून्य-लंबाई वाली स्ट्रिंग पहले से ही झूठी है, कोष्ठक बेमानी हैं, और इसे तीन बार नकारना बिल्कुल एक बार इसे नकारने के समान है।
जॉन मोंटगोमरी

8

इसे इस्तेमाल करे:

export const isEmpty = string => (!string || !string.length);

8

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

निम्नलिखित दो कार्य केवल अपरिभाषित, अशक्त, रिक्त / व्हाट्सएप मूल्यों के लिए सही हैं और बाकी सभी चीज़ों के लिए झूठ हैं, जैसे संख्याएं, बूलियन, ऑब्जेक्ट्स, भाव आदि।

function IsNullOrEmpty(value)
{
    return (value == null || value === "");
}
function IsNullOrWhiteSpace(value)
{
    return (value == null || !/\S/.test(value));
}

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

String.IsNullOrEmpty = function (value) { ... }

आप इसे स्ट्रिंग्स प्रोटोटाइप में नहीं डालना चाहते, क्योंकि अगर स्ट्रिंग-क्लास का उदाहरण शून्य है, तो यह त्रुटि करेगा:

String.prototype.IsNullOrEmpty = function (value) { ... }
var myvar = null;
if (1 == 2) { myvar = "OK"; } // Could be set
myvar.IsNullOrEmpty(); // Throws error

मैंने निम्नलिखित मूल्य सरणी के साथ परीक्षण किया। यदि आप संदेह में हैं तो अपने कार्यों का परीक्षण करने के लिए इसे लूप कर सकते हैं।

// Helper items
var MyClass = function (b) { this.a = "Hello World!"; this.b = b; };
MyClass.prototype.hello = function () { if (this.b == null) { alert(this.a); } else { alert(this.b); } };
var z;
var arr = [
// 0: Explanation for printing, 1: actual value
    ['undefined', undefined],
    ['(var) z', z],
    ['null', null],
    ['empty', ''],
    ['space', ' '],
    ['tab', '\t'],
    ['newline', '\n'],
    ['carriage return', '\r'],
    ['"\\r\\n"', '\r\n'],
    ['"\\n\\r"', '\n\r'],
    ['" \\t \\n "', ' \t \n '],
    ['" txt \\t test \\n"', ' txt \t test \n'],
    ['"txt"', "txt"],
    ['"undefined"', 'undefined'],
    ['"null"', 'null'],
    ['"0"', '0'],
    ['"1"', '1'],
    ['"1.5"', '1.5'],
    ['"1,5"', '1,5'], // Valid number in some locales, not in JavaScript
    ['comma', ','],
    ['dot', '.'],
    ['".5"', '.5'],
    ['0', 0],
    ['0.0', 0.0],
    ['1', 1],
    ['1.5', 1.5],
    ['NaN', NaN],
    ['/\S/', /\S/],
    ['true', true],
    ['false', false],
    ['function, returns true', function () { return true; } ],
    ['function, returns false', function () { return false; } ],
    ['function, returns null', function () { return null; } ],
    ['function, returns string', function () { return "test"; } ],
    ['function, returns undefined', function () { } ],
    ['MyClass', MyClass],
    ['new MyClass', new MyClass()],
    ['empty object', {}],
    ['non-empty object', { a: "a", match: "bogus", test: "bogus"}],
    ['object with toString: string', { a: "a", match: "bogus", test: "bogus", toString: function () { return "test"; } }],
    ['object with toString: null', { a: "a", match: "bogus", test: "bogus", toString: function () { return null; } }]
];

यदि आप बस == का उपयोग करना बंद कर देते हैं और === का उपयोग करते हैं, तो यह समस्या को हल करता है अगर (s === "")।
स्कॉट मार्कस

8

यह जाँचने के लिए कि क्या यह वास्तव में एक खाली स्ट्रिंग है:

if(val==="")...

यह जाँचने के लिए कि क्या यह रिक्त स्ट्रिंग है या बिना मूल्य के एक तार्किक समकक्ष है (अशक्त, अपरिभाषित, 0, NaN, false, ...):

if(!val)...

7

कोई isEmpty()विधि नहीं है, आपको टाइप और लंबाई की जांच करनी होगी:

if (typeof test === 'string' && test.length === 0){
  ...

जब या तो रनटाइम त्रुटियों से बचने के लिए टाइप चेक की आवश्यकता होती testहै ।undefinednull


7

व्हॉट्सएप के तारों को अनदेखा करना, आप इसका उपयोग अशक्त, खाली और अपरिभाषित की जांच करने के लिए कर सकते हैं:

var obj = {};
(!!obj.str) // Returns false

obj.str = "";
(!!obj.str) // Returns false

obj.str = null;
(!!obj.str) // Returns false

यह संक्षिप्त है और यह अपरिभाषित गुणों के लिए काम करता है, हालांकि यह सबसे पठनीय नहीं है।

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