यहाँ किसी ने भी इसका उल्लेख नहीं किया है NaN
, जो - मेरे लिए - एक अशक्त-ईश मान भी है। इसलिए, मैंने सोचा कि मैं अपने दो-सेंट जोड़ूंगा।
दिए गए कोड के लिए:
var a,
b = null,
c = parseInt('Not a number'),
d = 0,
e = '',
f = 1
;
यदि आप ||
ऑपरेटर का उपयोग करते थे , तो आपको पहला गैर-गलत मूल्य मिलता है:
var result = a || b || c || d || e || f; // result === 1
यदि आप यहाँ पर पोस्ट की गई विधि के अनुसार सामान्य कोलेसस विधि का उपयोग करते हैं , तो आपको मिलेगा c
, जिसका मूल्य है:NaN
var result = coalesce(a,b,c,d,e,f); // result.toString() === 'NaN'
इनमें से कोई भी मुझे सही नहीं लगता। अपने खुद के छोटे से संसार में, जो आपकी दुनिया से अलग हो सकता है, मैं अपरिभाषित, अशक्त और NaN को "अशक्त-ईश" मानता हूं। इसलिए, मैं d
मोटे विधि से वापस (शून्य) प्राप्त करने की उम्मीद करूंगा ।
यदि किसी का मस्तिष्क मेरी तरह काम करता है, और आप बाहर करना चाहते हैं NaN
, तो यह विधि इसे पूरा करेगी:
function coalesce() {
var i, undefined, arg;
for( i=0; i < arguments.length; i++ ) {
arg = arguments[i];
if( arg !== null && arg !== undefined
&& (typeof arg !== 'number' || arg.toString() !== 'NaN') ) {
return arg;
}
}
return null;
}
उन लोगों के लिए जो कोड को यथासंभव कम चाहते हैं, और स्पष्टता की कमी का बुरा नहीं मानते हैं, आप @impBball द्वारा सुझाए गए अनुसार भी इसका उपयोग कर सकते हैं। यह इस तथ्य का लाभ उठाता है कि NaN, NaN के बराबर नहीं है। आप यहाँ पर और अधिक पढ़ सकते हैं: NaN NaN के बराबर क्यों नहीं है?
function coalesce() {
var i, arg;
for( i=0; i < arguments.length; i++ ) {
arg = arguments[i];
if( arg != null && arg === arg ) { //arg === arg is false for NaN
return arg;
}
}
return null;
}
x ?? y
वाक्यविन्यास अब चरण 1 प्रस्ताव की स्थिति में है - व्यभिचारी coalescing