javascript - जावास्क्रिप्ट में एक "शून्य coalescing" ऑपरेटर है?




operators null-coalescing-operator (5)

अगर || सी # के प्रतिस्थापन के रूप में ?? आपके मामले में पर्याप्त नहीं है, क्योंकि यह खाली तारों और शून्यों को निगलता है, आप हमेशा अपना कार्य लिख सकते हैं:

 function $N(value, ifnull) {
    if (value === null || value === undefined)
      return ifnull;
    return value;
 }

 var whatIWant = $N(someString, 'Cookies!');

जावास्क्रिप्ट में एक शून्य coalescing ऑपरेटर है?

उदाहरण के लिए, सी # में, मैं यह कर सकता हूं:

String someString = null;
var whatIWant = someString ?? "Cookies!";

जावास्क्रिप्ट के लिए मैं सबसे अच्छा अनुमान लगा सकता हूं सशर्त ऑपरेटर का उपयोग कर रहा है:

var someString = null;
var whatIWant = someString ? someString : 'Cookies!';

जो कि icky IMHO है। क्या मैं बेहतर कर सकता हूँ?


अपनी स्पष्टीकरण पढ़ने के बाद, @ एट्स गोरल का जवाब यह बताता है कि आप उसी ऑपरेशन को कैसे करें जो आप जावास्क्रिप्ट में सी # में कर रहे हैं।

@ गम्बो का जवाब शून्य की जांच करने का सबसे अच्छा तरीका प्रदान करता है; हालांकि, जावास्क्रिप्ट में == बनाम === में अंतर को ध्यान में रखना महत्वपूर्ण है, खासकर जब यह undefined और / या null लिए जांच के मुद्दों की बात आती है।

यहां दो शर्तों में अंतर के बारे में एक बहुत अच्छा लेख here । असल में, समझें कि यदि आप === बजाय == उपयोग करते हैं, तो जावास्क्रिप्ट आपके द्वारा तुलना की जा रही मानों को एकत्रित करने का प्रयास करेगा और इस सहवास के बाद तुलना के परिणाम को वापस कर देगा।


वर्तमान में कोई समर्थन नहीं है, लेकिन जेएस-मानकीकरण प्रक्रिया इस पर काम कर रही है: https://github.com/tc39/proposal-optional-chaining


शून्य की जावास्क्रिप्ट विशिष्ट परिभाषा से सावधान रहें। जावास्क्रिप्ट में "नो वैल्यू" के लिए दो परिभाषाएं हैं। 1. शून्य: जब एक चर शून्य है, तो इसका मतलब है कि इसमें कोई डेटा नहीं है, लेकिन चर पहले ही कोड में परिभाषित है। इस तरह:

var myEmptyValue = 1;
myEmptyValue = null;
if ( myEmptyValue === null ) { window.alert('it is null'); }
// alerts

ऐसे मामले में, आपके चर का प्रकार वास्तव में ऑब्जेक्ट है। झसे आज़माओ।

window.alert(typeof myEmptyValue); // prints Object
  1. अपरिभाषित: जब किसी चर को कोड में पहले परिभाषित नहीं किया गया है, और जैसा कि अपेक्षित है, इसमें कोई मान नहीं है। इस तरह:

    if ( myUndefinedValue === undefined ) { window.alert('it is undefined'); }
    // alerts
    

यदि ऐसा मामला है, तो आपके चर का प्रकार 'अपरिभाषित' है।

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


function coalesce() {
    var len = arguments.length;
    for (var i=0; i<len; i++) {
        if (arguments[i] !== null && arguments[i] !== undefined) {
            return arguments[i];
        }
    }
    return null;
}

var xyz = {};
xyz.val = coalesce(null, undefined, xyz.val, 5);

// xyz.val now contains 5

यह समाधान एसक्यूएल कोलेसेस फ़ंक्शन की तरह काम करता है, यह किसी भी संख्या में तर्क स्वीकार करता है, और उनमें से कोई भी मूल्य नहीं होने पर शून्य हो जाता है। यह सी # की तरह व्यवहार करता है ?? ऑपरेटर इस अर्थ में है कि "", झूठी, और 0 को पूर्ण नहीं माना जाता है और इसलिए वास्तविक मानों के रूप में गिना जाता है। यदि आप किसी .NET पृष्ठभूमि से आते हैं, तो यह सबसे प्राकृतिक अनुभव समाधान होगा।





null-coalescing