जब हम सार में खाली कोड का मतलब निम्न में से किसी भी एक परिस्थिति को दे सकते हैं;
- 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']));
यह सरल और व्यापक उपयोग केस फंक्शन है जिसे मैंने अपने ढांचे में अपनाया है;
- दिए गए स्थिति में खाली की परिभाषा वास्तव में क्या है, इस पर नियंत्रण देता है
- खाली की शर्तों को फिर से परिभाषित करने के लिए नियंत्रण देता है
- स्ट्रिंग, संख्या, फ्लोट, सत्य, अशक्त, अपरिभाषित और गहरी सरणियों से लगभग हर चीज के लिए तुलना कर सकते हैं
- समाधान को लचीलापन और लचीलेपन को ध्यान में रखते हुए तैयार किया गया है। अन्य सभी जवाब मामले में अनुकूल हैं यदि सरल एक या दो मामलों को निपटाया जाए। हालांकि, हमेशा एक ऐसा मामला होता है जब स्निपेट्स के ऊपर कोडिंग करते समय खाली परिवर्तनों की परिभाषा उस मामले में निर्दोष रूप से काम करती है।
if(data)जैसा कि यहाँ