यदि जेएस में कोई मान शून्य है और खाली स्ट्रिंग नहीं है तो कैसे जांचें


86

यदि जावास्क्रिप्ट में कोई मान शून्य और खाली स्ट्रिंग नहीं है तो क्या कोई जांच है? मैं निम्नलिखित का उपयोग कर रहा हूं:

var data; //get its value from db 
if(data != null && data != '') {
   // do something
}

लेकिन मैं सोच रहा हूं कि क्या कोई और बेहतर उपाय है। धन्यवाद।


6
if(data)जैसा कि यहाँ
— CIFForCookies

1
मैंने यह कोशिश की लेकिन दो मामलों में से एक में यह काम नहीं कर रहा था।
— ivva

आप सभी को धन्यवाद, मैं यह कोशिश करूंगा। मुझे उम्मीद है कि यह काम करेगा।
— ivva

undefinedउन विशेष मामलों में से एक है, जो आपके तर्क के अनुसार, ट्रिगर होने चाहिए, // do somethingलेकिन नहीं।
— सलमान A

जवाबों:


163

यदि आप वास्तव में पुष्टि करना चाहते हैं कि एक चर शून्य नहीं है और विशेष रूप से एक खाली स्ट्रिंग नहीं है, तो आप लिखेंगे:

if(data !== null && data !== '') {
   // do something
}

ध्यान दें कि मैंने आपके कोड को टाइप समानता ( !==! ===) के लिए जाँच करने के लिए बदल दिया है ।

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

if (data) {
  // do something
}

चूंकि, जावास्क्रिप्ट में, शून्य मान और खाली तार दोनों, झूठे (यानी null == false) के बराबर हैं ।

कोड के उन 2 भागों के बीच का अंतर यह है कि, पहले एक के लिए, प्रत्येक मूल्य जो विशेष रूप से अशक्त या खाली स्ट्रिंग नहीं है, में प्रवेश करेगा if। लेकिन, दूसरा एक पर, हर सच्चे-ish मूल्य में प्रवेश करेंगे if: false, 0, null, undefinedऔर रिक्त स्ट्रिंग, नहीं होगा।


2
0 बहुत सारे मामलों में एक उचित मूल्य है
— Aequitas

3
इसीलिए वाजिब शब्द कोट्स के साथ लिपटा हुआ है :)
— गेर्शोन पापी

@ एडम अगर यह नहीं है, तो आप इसे खाली छोड़ सकते हैं और किसी अन्य का उपयोग कर सकते हैं। यह हमेशा उम्मीद के मुताबिक पलटना होगा।
— द नैट

क्या यह डेटा नहीं होना चाहिए! == अशक्त || डेटा? == '' के बजाय && का उपयोग कर रहे हैं?
— इमदाद

@ इम्दाद ने ओपी को यह जांचने के लिए कहा कि क्या मूल्य शून्य नहीं है और खाली स्ट्रिंग नहीं है, इसलिए नहीं।
— गेरशोन पापी

18

दोनों nullएक खाली स्ट्रिंग जेएस में मिथ्या मूल्य हैं। इसलिए,

if (data) { ... }

पूरी तरह से पर्याप्त है।

पक्ष पर एक नोट हालांकि: मैं अपने कोड में एक चर होने से बचूंगा जो विभिन्न प्रकारों में प्रकट हो सकता है। यदि डेटा अंततः एक स्ट्रिंग होगा, तो मैं शुरू में एक खाली स्ट्रिंग के साथ अपने चर को परिभाषित करूंगा, इसलिए आप ऐसा कर सकते हैं:

if (data !== '') { ... }

data = "0"रास्ते में हो रही अशक्त (या किसी भी अजीब सामान ) के बिना।


11

के बजाय का उपयोग करने का

if(data !== null && data !== ''  && data!==undefined) {

// do something
}

आप नीचे सरल कोड का उपयोग कर सकते हैं

if(Boolean(value)){ 
// do something 
}
  • वे मान जो सहज रूप से "खाली" होते हैं, जैसे 0, एक खाली स्ट्रिंग, अशक्त, अपरिभाषित और NaN, झूठे हो जाते हैं
  • अन्य मूल्य सत्य हो जाते हैं

6

मैं अक्सर सत्य मान के लिए परीक्षण करता हूं और स्ट्रिंग में रिक्त स्थानों के लिए भी:

if(!(!data || data.trim().length === 0)) {
  // do something here
}

यदि आपके पास एक स्ट्रिंग है जिसमें एक या एक से अधिक रिक्त स्थान हैं तो यह सच का मूल्यांकन करेगा।


4
if (data?.trim().length > 0) {
   //use data
}

?. वैकल्पिक श्रृंखलन ऑपरेटर होगा शॉर्ट सर्किट और बदले undefinedअगर डेटा है nullish( nullया undefined), जिसमें गलत पर मूल्यांकन करेंगे ifअभिव्यक्ति।


मैं ईमानदारी से इस ऑपरेटर के बारे में नहीं जानता था .. दुर्भाग्य से कुछ एंड्रॉइड ब्राउज़र इसका समर्थन नहीं करते हैं, लेकिन अन्यथा समर्थन बहुत अच्छा है!
— ब्रैंडनमैक

2

शून्य और रिक्त दोनों को निम्नानुसार मान्य किया जा सकता है:

<script>
function getName(){
    var myname = document.getElementById("Name").value;
    if(myname != '' && myname != null){
        alert("My name is "+myname);
    }else{
        alert("Please Enter Your Name");
    }       
}


1

इसे आज़माएं ----------

function myFun(){
var inputVal=document.getElementById("inputId").value;
if(inputVal){
document.getElementById("result").innerHTML="<span style='color:green'>The value is "+inputVal+'</span>';
}
else{
document.getElementById("result").innerHTML="<span style='color:red'>Something error happen! the input May be empty.</span>";
}
}
<input type="text" id="inputId">
<input type="button" onclick="myFun()" value="View Result">
<h1 id="result"></h1>


1

जब हम सार में खाली कोड का मतलब निम्न में से किसी भी एक परिस्थिति को दे सकते हैं;

  • 0 के रूप में संख्या मूल्य में
  • 0.0 फ्लोट मान के रूप में
  • स्ट्रिंग मान में '0'
  • स्ट्रिंग मान में '0.0'
  • अशक्त मान के रूप में अशक्त, मौका के अनुसार यह अपरिभाषित भी पकड़ सकता है या यह नहीं हो सकता है
  • अपरिभाषित मान के रूप में अपरिभाषित
  • झूठे सत्य के रूप में झूठ, मूल्य के रूप में मौका 0 के रूप में भी सत्य है, लेकिन क्या होगा यदि हम झूठे को पकड़ना चाहते हैं
  • कोई सफेद स्थान या टैब के साथ '' खाली स्टिंग वैल्यू
  • केवल सफेद स्थान या टैब के साथ '' स्ट्रिंग

ओपी के अनुसार वास्तविक जीवन की स्थिति में हम उन सभी का परीक्षण करना चाहते हैं या कई बार हम केवल सीमित परिस्थितियों के लिए परीक्षण करना चाहते हैं।

आम तौर पर if(!a){return true;}ज्यादातर समय अपने उद्देश्य को पूरा करता है, लेकिन यह व्यापक परिस्थितियों को कवर नहीं करेगा।

एक और हैक जिसने अपना दौर बनाया है return (!value || value == undefined || value == "" || value.length == 0);

लेकिन क्या होगा अगर हमें पूरी प्रक्रिया पर नियंत्रण की आवश्यकता है?

देशी कोर जावास्क्रिप्ट में कोई सरल व्हिपलैश समाधान नहीं है, इसे अपनाना होगा। यह देखते हुए कि हम विरासत का समर्थन IE11 के लिए समर्थन छोड़ देते हैं (ईमानदार होने के लिए भी खिड़कियों में ऐसा होना चाहिए) नीचे समाधान सभी आधुनिक ब्राउज़रों में हताशा कार्यों से पैदा हुआ है;

 function empty (a,b=[])
 {if(!Array.isArray(b)) return; 
 var conditions=[null,'0','0.0',false,undefined,''].filter(x => !b.includes(x));
 if(conditions.includes(a)|| (typeof a === 'string' && conditions.includes(a.toString().trim())))
 {return true;};
 return false;};`

समाधान के पीछे लॉजिक फ़ंक्शन के दो पैरामीटर हैं a और b , एक मान है जिसकी हमें जांच करने की आवश्यकता है, b एक सेट है जिसमें सेट की गई शर्तों के साथ हमें पूर्वनिर्धारित शर्तों से बाहर सूचीबद्ध करने की आवश्यकता है। B का डिफ़ॉल्ट मान एक खाली सरणी [] पर सेट है।

फ़ंक्शन का पहला रन यह जांचना है कि बी एक सरणी है या नहीं, यदि नहीं तो फ़ंक्शन से जल्दी बाहर निकलें।

अगला चरण [null,'0','0.0',false,undefined,'']सरणी बी से और सरणी अंतर की गणना करना है । अगर बी एक खाली सरणी है तो पूर्वनिर्धारित स्थितियां और खड़े हो जाएंगी इससे मिलान मूल्य निकल जाएंगे।

शर्तें = [पूर्वनिर्धारित सेट] - [सेट को बाहर रखा जाना है] फ़िल्टर फ़ंक्शन ठीक यही करता है कि इसका उपयोग करें। अब जब हमारे पास एरी सेट में स्थितियां हैं, तो हमें यह देखने की ज़रूरत है कि क्या मान ऐरे में है या नहीं। फ़ंक्शन में यह भी शामिल है कि अपने स्वयं के खराब जेएस इंजन को भारी उठाने के लिए लूप लिखने की कोई आवश्यकता नहीं है।

पकड़ लिया है कि अगर हम स्ट्रिंग में तुलना के लिए एक कन्वर्ट करने के लिए कर रहे हैं तो 0 और 0.0 तथापि अशक्त और अपरिभाषित पूरी स्क्रिप्ट अवरुद्ध त्रुटि के माध्यम से होता है ठीक चलाना शामिल है। हमें एज केस सॉल्यूशन चाहिए। नीचे सरल || यदि पहली स्थिति से संतुष्ट नहीं हैं तो किनारे के मामले को कवर करता है। शामिल होने के माध्यम से एक और प्रारंभिक जाँच चलाने से जल्दी बाहर निकलना पड़ता है अगर नहीं मिले।

if(conditions.includes(a)||  (['string', 'number'].includes(typeof a) && conditions.includes(a.toString().trim())))

ट्रिम () फ़ंक्शन व्यापक सफेद रिक्त स्थान और टैब के लिए केवल मूल्य को कवर करेगा और केवल किनारे के परिदृश्य में खेल में आएगा।

खेल का मैदान

function empty (a,b=[]){
if(!Array.isArray(b)) return;
conditions=[null,'0','0.0',false,undefined,''].filter(x => !b.includes(x));
if(conditions.includes(a)|| 
(['string', 'number'].includes(typeof a) && conditions.includes(a.toString().trim()))){
 return true;
} 
return false;
}

console.log('1 '+empty());
console.log('2 '+empty(''));
console.log('3 '+empty('      '));
console.log('4 '+empty(0));
console.log('5 '+empty('0'));
console.log('6 '+empty(0.0));
console.log('7 '+empty('0.0'));
console.log('8 '+empty(false));
console.log('9 '+empty(null));
console.log('10 '+empty(null,[null]));
console.log('11 dont check 0 as number '+empty(0,['0']));
console.log('12 dont check 0 as string '+empty('0',['0']));
console.log('13 as number for false as value'+empty(false,[false]));

आओ हम इसे जटिल बनाते हैं - क्या होगा यदि तुलना करने के लिए हमारा मूल्य इसकी स्वयं की सरणी है और इसे जितना गहरा नेस्ट किया जा सकता है। क्या होगा अगर हम जाँच करें कि क्या सरणी में कोई मान रिक्त है, तो यह एक किनारे का व्यवसाय मामला हो सकता है।

function empty (a,b=[]){
    if(!Array.isArray(b)) return;

    conditions=[null,'0','0.0',false,undefined,''].filter(x => !b.includes(x));
    if(Array.isArray(a) && a.length > 0){
    for (i = 0; i < a.length; i++) { if (empty(a[i],b))return true;} 
    } 
    
    if(conditions.includes(a)|| 
    (['string', 'number'].includes(typeof a) && conditions.includes(a.toString().trim()))){
     return true;
    } 
    return false;
    }

console.log('checking for all values '+empty([1,[0]]));
console.log('excluding for 0 from condition '+empty([1,[0]], ['0']));

यह सरल और व्यापक उपयोग केस फंक्शन है जिसे मैंने अपने ढांचे में अपनाया है;

  • दिए गए स्थिति में खाली की परिभाषा वास्तव में क्या है, इस पर नियंत्रण देता है
  • खाली की शर्तों को फिर से परिभाषित करने के लिए नियंत्रण देता है
  • स्ट्रिंग, संख्या, फ्लोट, सत्य, अशक्त, अपरिभाषित और गहरी सरणियों से लगभग हर चीज के लिए तुलना कर सकते हैं
  • समाधान को लचीलापन और लचीलेपन को ध्यान में रखते हुए तैयार किया गया है। अन्य सभी जवाब मामले में अनुकूल हैं यदि सरल एक या दो मामलों को निपटाया जाए। हालांकि, हमेशा एक ऐसा मामला होता है जब स्निपेट्स के ऊपर कोडिंग करते समय खाली परिवर्तनों की परिभाषा उस मामले में निर्दोष रूप से काम करती है।

0

मैं विशेष रूप से अशक्त और खाली तारों की जांच से इतना तंग आ गया, कि अब मैं आमतौर पर केवल एक छोटा कार्य लिखता हूं और इसे करने के लिए कहता हूं।

/**
 * Test if the given value equals null or the empty string.
 * 
 * @param {string} value
**/
const isEmpty = (value) => value === null || value === '';

// Test:
isEmpty('');        // true
isEmpty(null);      // true
isEmpty(1);         // false
isEmpty(0);         // false
isEmpty(undefined); // false

0

function validateAttrs(arg1, arg2, arg3,arg4){
    var args = Object.values(arguments);
    return (args.filter(x=> x===null || !x)).length<=0
}
console.log(validateAttrs('1',2, 3, 4));
console.log(validateAttrs('1',2, 3, null));
console.log(validateAttrs('1',undefined, 3, 4));
console.log(validateAttrs('1',2, '', 4));
console.log(validateAttrs('1',2, 3, null));

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