javascript - हरण - अल्पविराम ऑपरेटर कब उपयोगी होता है?




विवरण चिन्ह के उदाहरण (7)

अल्पविराम ऑपरेटर के लिए एक और उपयोग उन परिणामों को छिपाना है जिन्हें आप प्रतिलिपि या कंसोल में पूरी तरह से सुविधा के रूप में नहीं देखते हैं।

उदाहरण के लिए, यदि आप myVariable = aWholeLotOfText या कंसोल में myVariable = aWholeLotOfText मूल्यांकन करते हैं, तो यह आपके द्वारा निर्दिष्ट सभी डेटा प्रिंट करेगा। यह पेज और पेज हो सकता है, और यदि आप इसे देखना नहीं चाहते हैं, तो आप इसके बजाय myVariable = aWholeLotOfText, 'done' मूल्यांकन कर सकते हैं, और प्रतिलिपि / कंसोल सिर्फ 'पूर्ण' प्रिंट करेगा।

ओरिएल सही ढंग से इंगित करता है कि toString() अनुकूलित करने के लिए toString() या get() फ़ंक्शंस इसे भी उपयोगी बना सकता है।

मैंने अभिव्यक्ति ( , ) और इसके बारे में एमडीएन दस्तावेज़ों में "अल्पविराम ऑपरेटर" के बारे में this प्रश्न पढ़ा है, लेकिन मैं ऐसे परिदृश्य के बारे में नहीं सोच सकता जहां यह उपयोगी है।

तो, अल्पविराम ऑपरेटर कब उपयोगी है?


इसका उपयोग करने वाला एक सामान्य मामला वैकल्पिक तर्क पार्सिंग के दौरान होता है। मुझे लगता है कि यह दोनों को और अधिक पठनीय और अधिक संक्षेप में बनाता है ताकि तर्क पार्सिंग फ़ंक्शन बॉडी पर हावी न हो।

/**
 * @param {string} [str]
 * @param {object} [obj]
 * @param {Date} [date]
 */
function f(str, obj, date) {
  // handle optional arguments
  if (typeof str !== "string") date = obj, obj = str, str = "default";
  if (obj instanceof Date) date = obj, obj = {};
  if (!(date instanceof Date)) date = new Date();

  // ...
}

कुछ ऐसा "अजीब" है जिसे जावास्क्रिप्ट में किया जा सकता है जिसे कॉमा ऑपरेटर का उपयोग करके अप्रत्यक्ष रूप से फ़ंक्शन को कॉल किया जा सकता है।

यहां एक लंबा विवरण है: जावास्क्रिप्ट में अप्रत्यक्ष फ़ंक्शन कॉल

इस वाक्यविन्यास का उपयोग करके:

(function() {
    "use strict";
  
    var global = (function () { return this || (1,eval)("this"); })();
    console.log('Global === window should be true: ', global === window);
  
    var not_global = (function () { return this })();
    console.log('not_global === window should be false: ', not_global === window);
  
  }());

आप ग्लोबल वैरिएबल तक पहुंच प्राप्त कर सकते हैं क्योंकि सीधे बनाम अप्रत्यक्ष रूप से बुलाए जाने पर eval अलग-अलग काम करता है।


कॉमा ऑपरेटर जावास्क्रिप्ट के लिए विशिष्ट नहीं है, यह सी और सी ++ जैसी अन्य भाषाओं में उपलब्ध है। एक बाइनरी ऑपरेटर के रूप में यह तब उपयोगी होता है जब पहला ऑपरेंड, जो आमतौर पर एक अभिव्यक्ति है, वांछित पक्ष प्रभाव दूसरे ऑपरेंड द्वारा आवश्यक है। विकिपीडिया से एक उदाहरण:

i = a += 2, a + b;

जाहिर है आप कोड की दो अलग-अलग पंक्तियां लिख सकते हैं, लेकिन अल्पविराम का उपयोग करना एक और विकल्प है और कभी-कभी अधिक पठनीय होता है।


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

if(x){foo();return bar()}else{return 1}

बन जाएगा:

return x?(foo(),bar()):1

? : ? : ऑपरेटर का अब उपयोग किया जा सकता है, क्योंकि अल्पविराम ऑपरेटर (कुछ हद तक) एक बयान के रूप में दो बयान लिखने की अनुमति देता है।

यह उपयोगी है कि यह कुछ साफ संपीड़न (39 -> 24 बाइट्स) के लिए अनुमति देता है।

मैं इस तथ्य पर जोर देना चाहता हूं कि var a, b अल्पविराम ऑपरेटर नहीं है क्योंकि यह अभिव्यक्ति के भीतर मौजूद नहीं है। var बयानों में अल्पविराम का विशेष अर्थ है। a, b अभिव्यक्ति में a, b दो चरों का जिक्र करेगा और b मूल्यांकन करेगा, जो var a, b के मामले में नहीं है।


मुझे इसके अलावा इसका व्यावहारिक उपयोग नहीं मिला है, लेकिन यहां एक परिदृश्य है जिसमें जेम्स पैडॉल्सी थोड़ी देर में आईई डिटेक्शन के लिए इस तकनीक का अच्छी तरह से उपयोग करता है:

var ie = (function(){

    var undef,
        v = 3,
        div = document.createElement('div'),
        all = div.getElementsByTagName('i');

    while ( // <-- notice no while body here
        div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
        all[0]
    );

    return v > 4 ? v : undef;

}());

इन दो पंक्तियों को निष्पादित करना होगा:

div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
all[0]

और अल्पविराम ऑपरेटर के अंदर, दोनों का मूल्यांकन किया जाता है हालांकि कोई भी उन्हें अलग-अलग वक्तव्य बना सकता था।


अल्पविराम ऑपरेटर आपको ऐसी जगह पर कई अभिव्यक्तियों को रखने की अनुमति देता है जहां एक अभिव्यक्ति की अपेक्षा की जाती है। अल्पविराम से अलग एकाधिक अभिव्यक्तियों का परिणामस्वरूप मूल्य अंतिम अल्पविराम से अलग अभिव्यक्ति का मूल्य होगा।

मैं व्यक्तिगत रूप से इसका अक्सर उपयोग नहीं करता क्योंकि वहां ऐसी कई स्थितियां नहीं हैं जहां एक से अधिक अभिव्यक्ति की अपेक्षा की जाती है और अल्पविराम ऑपरेटर का उपयोग करने से कोड लिखने के लिए कोई भ्रमित तरीका नहीं है। लूप के अंत में एक दिलचस्प संभावना है जब आप एक से अधिक चर को बढ़ाना चाहते हैं:

// j is initialized to some other value
// as the for loop executes both i and j are incremented
// because the comma operator allows two statements to be put in place of one
for (var i = 0; i < items.len; i++, j++) {
    // loop code here that operates on items[i] 
    // and sometimes uses j to access a different array
}

यहां आप देखते हैं कि i++, j++ को उस स्थान पर रखा जा सकता है जहां एक अभिव्यक्ति की अनुमति है। इस विशेष मामले में, पक्ष के लिए कई अभिव्यक्तियों का उपयोग किया जाता है, इसलिए इससे कोई फर्क नहीं पड़ता कि यौगिक अभिव्यक्ति आखिरी के मूल्य पर होती है, लेकिन ऐसे अन्य मामले भी हैं जहां वास्तव में कोई फर्क पड़ता है।





comma-operator