जावास्क्रिप्ट के नलीश कोलेसिंग ऑपरेटर (??) का उपयोग करके डिफ़ॉल्ट वैल्यू असाइनमेंट को बेहतर बनाएँ। जानें कि यह OR ऑपरेटर (||) से कैसे अलग है और व्यावहारिक उदाहरण देखें।
जावास्क्रिप्ट नलीश कोलेसिंग: डिफ़ॉल्ट वैल्यू असाइनमेंट के लिए एक व्यापक गाइड
जावास्क्रिप्ट में, डिफ़ॉल्ट वैल्यू असाइन करना एक आम काम है। पारंपरिक रूप से, डेवलपर्स इस उद्देश्य के लिए OR ऑपरेटर (||
) का उपयोग करते आए हैं। हालाँकि, ECMAScript 2020 में पेश किया गया नलीश कोलेसिंग ऑपरेटर (??
), डिफ़ॉल्ट वैल्यू असाइनमेंट को संभालने का एक अधिक सटीक और विश्वसनीय तरीका प्रदान करता है, विशेष रूप से जब null
या undefined
वैल्यूज से निपटना हो। यह गाइड नलीश कोलेसिंग ऑपरेटर की गहराई से जानकारी प्रदान करती है, जिसमें इसके सिंटैक्स, व्यवहार, OR ऑपरेटर से अंतर, और व्यावहारिक उपयोग के मामलों का पता लगाया गया है।
नलीश कोलेसिंग क्या है?
नलीश कोलेसिंग ऑपरेटर (??
) एक लॉजिकल ऑपरेटर है जो अपने दाहिने हाथ के ऑपरेंड को तब लौटाता है जब उसका बायां हाथ का ऑपरेंड null
या undefined
होता है। अन्यथा, यह अपने बाएं हाथ के ऑपरेंड को लौटाता है। सरल शब्दों में, यह केवल तभी एक डिफ़ॉल्ट वैल्यू प्रदान करता है जब कोई वेरिएबल सख्ती से null
या undefined
हो।
सिंटैक्स
नलीश कोलेसिंग ऑपरेटर का सिंटैक्स सीधा है:
leftOperand ?? rightOperand
यहां, leftOperand
वह वेरिएबल या एक्सप्रेशन है जिसे आप null
या undefined
के लिए जाँचना चाहते हैं, और rightOperand
वह डिफ़ॉल्ट वैल्यू है जिसे आप असाइन करना चाहते हैं यदि leftOperand
वास्तव में null
या undefined
है।
उदाहरण
निम्नलिखित उदाहरण पर विचार करें:
const username = null ?? "Guest";
console.log(username); // आउटपुट: Guest
const age = undefined ?? 25;
console.log(age); // आउटपुट: 25
const city = "London" ?? "Unknown";
console.log(city); // आउटपुट: London
इस उदाहरण में, username
को डिफ़ॉल्ट वैल्यू "Guest" दी गई है क्योंकि यह शुरू में null
है। इसी तरह, age
को 25 दिया गया है क्योंकि यह undefined
से शुरू होता है। हालाँकि, city
अपना मूल मान, "London", बनाए रखता है, क्योंकि यह न तो null
है और न ही undefined
।
नलीश बनाम फॉल्सी वैल्यूज
जावास्क्रिप्ट में नलीश और फॉल्सी वैल्यूज के बीच के अंतर को समझना महत्वपूर्ण है। एक नलीश वैल्यू या तो null
या undefined
होती है। एक फॉल्सी वैल्यू वह वैल्यू है जिसे बूलियन संदर्भ में सामना करने पर false माना जाता है। फॉल्सी वैल्यूज में शामिल हैं:
null
undefined
0
(शून्य)NaN
(संख्या नहीं)''
(खाली स्ट्रिंग)false
मुख्य अंतर यह है कि नलीश कोलेसिंग ऑपरेटर केवल null
या undefined
के लिए जाँच करता है, जबकि OR ऑपरेटर (||
) किसी भी फॉल्सी वैल्यू के लिए जाँच करता है।
??
और ||
के बीच अंतर
OR ऑपरेटर (||
) एक लॉजिकल OR ऑपरेटर है जो दाहिने हाथ के ऑपरेंड को लौटाता है यदि बायां हाथ का ऑपरेंड फॉल्सी हो। हालांकि इसका उपयोग डिफ़ॉल्ट वैल्यू असाइन करने के लिए किया जा सकता है, यह 0
या खाली स्ट्रिंग जैसी वैल्यूज से निपटने पर अप्रत्याशित व्यवहार का कारण बन सकता है।
उदाहरण: ||
की कमियाँ
const quantity = 0 || 10; // हमारा इरादा 10 का डिफ़ॉल्ट देना है यदि मात्रा गायब है
console.log(quantity); // आउटपुट: 10 (अप्रत्याशित!) क्योंकि 0 फॉल्सी है
const text = '' || 'Default Text'; // हमारा इरादा एक डिफ़ॉल्ट टेक्स्ट देना है यदि टेक्स्ट गायब है
console.log(text); // आउटपुट: Default Text (अप्रत्याशित!) क्योंकि '' फॉल्सी है
पहले उदाहरण में, हमारा इरादा केवल तभी 10 की डिफ़ॉल्ट मात्रा निर्दिष्ट करने का था जब quantity
गायब थी (null
या undefined
)। हालाँकि, क्योंकि 0
एक फॉल्सी वैल्यू है, OR ऑपरेटर ने गलत तरीके से डिफ़ॉल्ट वैल्यू निर्दिष्ट कर दी। इसी तरह, खाली स्ट्रिंग डिफ़ॉल्ट टेक्स्ट को दिखाए जाने का कारण बनती है, भले ही स्ट्रिंग मौजूद हो (लेकिन खाली हो)।
सटीकता के लिए ??
का उपयोग
आइए पिछले उदाहरण को नलीश कोलेसिंग ऑपरेटर का उपयोग करके फिर से लिखें:
const quantity = 0 ?? 10;
console.log(quantity); // आउटपुट: 0 (सही!)
const text = '' ?? 'Default Text';
console.log(text); // आउटपुट: '' (सही!)
अब, आउटपुट अपेक्षित है। नलीश कोलेसिंग ऑपरेटर केवल null
या undefined
के लिए जाँच करता है, इसलिए 0
और ''
को मान्य वैल्यूज के रूप में माना जाता है, और उनके मूल मान संरक्षित रहते हैं।
नलीश कोलेसिंग के उपयोग के मामले
नलीश कोलेसिंग ऑपरेटर विभिन्न परिदृश्यों में उपयोगी है जहाँ आपको केवल तभी डिफ़ॉल्ट वैल्यूज प्रदान करने की आवश्यकता होती है जब कोई वेरिएबल सख्ती से null
या undefined
हो। यहाँ कुछ सामान्य उपयोग के मामले दिए गए हैं:
1. वैकल्पिक फ़ंक्शन पैरामीटर्स को संभालना
वैकल्पिक पैरामीटर्स के साथ एक फ़ंक्शन को परिभाषित करते समय, आप डिफ़ॉल्ट वैल्यूज प्रदान करने के लिए नलीश कोलेसिंग ऑपरेटर का उपयोग कर सकते हैं यदि पैरामीटर्स प्रदान नहीं किए गए हैं।
function greet(name, greeting) {
const userName = name ?? "User";
const userGreeting = greeting ?? "Hello";
console.log(`${userGreeting}, ${userName}!`);
}
greet(); // आउटपुट: Hello, User!
greet("Alice"); // आउटपुट: Hello, Alice!
greet("Bob", "Greetings"); // आउटपुट: Greetings, Bob!
2. डिफ़ॉल्ट कॉन्फ़िगरेशन विकल्प सेट करना
कॉन्फ़िगरेशन ऑब्जेक्ट्स के साथ काम करते समय, आप यह सुनिश्चित करने के लिए नलीश कोलेसिंग ऑपरेटर का उपयोग कर सकते हैं कि यदि कुछ कॉन्फ़िगरेशन विकल्प निर्दिष्ट नहीं हैं तो डिफ़ॉल्ट वैल्यूज का उपयोग किया जाए।
const config = {
timeout: 5000,
retries: 3
};
function fetchData(options) {
const timeout = options.timeout ?? 10000; // 10 सेकंड का डिफ़ॉल्ट टाइमआउट
const retries = options.retries ?? 5; // डिफ़ॉल्ट 5 रिट्राइज
console.log(`Timeout: ${timeout}, Retries: ${retries}`);
}
fetchData(config); // आउटपुट: Timeout: 5000, Retries: 3
fetchData({}); // आउटपुट: Timeout: 10000, Retries: 5
fetchData({timeout:null, retries: undefined}); // आउटपुट: Timeout: 10000, Retries: 5
3. नेस्टेड ऑब्जेक्ट प्रॉपर्टीज तक पहुँचना
नेस्टेड ऑब्जेक्ट्स की प्रॉपर्टीज तक पहुँचते समय, नलीश कोलेसिंग ऑपरेटर को ऑप्शनल चेनिंग (?.
) के साथ जोड़ा जा सकता है ताकि डिफ़ॉल्ट वैल्यूज प्रदान की जा सकें यदि कोई भी मध्यवर्ती प्रॉपर्टीज null
या undefined
हैं।
const user = {
profile: {
address: {
city: "New York"
}
}
};
const cityName = user?.profile?.address?.city ?? "Unknown";
console.log(cityName); // आउटपुट: New York
const unknownUser = {};
const unknownCityName = unknownUser?.profile?.address?.city ?? "Unknown";
console.log(unknownCityName); // आउटपुट: Unknown
4. APIs और बाहरी डेटा के साथ काम करना
APIs या बाहरी स्रोतों से डेटा प्राप्त करते समय, नलीश कोलेसिंग ऑपरेटर का उपयोग डिफ़ॉल्ट वैल्यूज प्रदान करने के लिए किया जा सकता है यदि कुछ डेटा फ़ील्ड गायब हैं या उनमें null
या undefined
वैल्यूज हैं। विभिन्न क्षेत्रों से उपयोगकर्ता डेटा पुनर्प्राप्त करने पर विचार करें। मान लें कि कुछ क्षेत्र अपने उपयोगकर्ता डेटा में `country` फ़ील्ड शामिल नहीं कर सकते हैं।
async function getUserData(userId) {
try {
const response = await fetch(`https://api.example.com/users/${userId}`);
const data = await response.json();
const country = data.country ?? "Unknown Country";
const timezone = data.timezone ?? "UTC";
console.log(`User is from: ${country}, Timezone: ${timezone}`);
} catch (error) {
console.error("Error fetching user data:", error);
}
}
// विभिन्न API प्रतिक्रियाओं का अनुकरण:
const userWithCountry = { name: "John", country: "USA", timezone: "EST" };
const userWithoutCountry = { name: "Jane", timezone: "GMT" };
// इसे परखने के लिए, आपको एक वास्तविक API या मॉक फेच की आवश्यकता होगी।
// प्रदर्शन के उद्देश्यों के लिए, आइए प्रतिक्रियाओं का अनुकरण करें:
global.fetch = async (url) => {
if (url.includes("123")) {
return { json: async () => userWithCountry };
} else if (url.includes("456")) {
return { json: async () => userWithoutCountry };
}
throw new Error("Unexpected URL");
};
getUserData(123); // आउटपुट: User is from: USA, Timezone: EST
getUserData(456); // आउटपुट: User is from: Unknown Country, Timezone: GMT
ऑपरेटर प्रेसिडेंस
नलीश कोलेसिंग ऑपरेटर की ऑपरेटर प्रेसिडेंस अपेक्षाकृत कम है। यह OR (||
) और AND (&&
) ऑपरेटरों से कम है। इसलिए, जब नलीश कोलेसिंग ऑपरेटर को अन्य लॉजिकल ऑपरेटरों के साथ मिलाते हैं, तो संचालन के क्रम को स्पष्ट रूप से परिभाषित करने के लिए कोष्ठक (parentheses) का उपयोग करना आवश्यक है। ऐसा करने में विफल रहने पर सिंटैक्स त्रुटियां या अप्रत्याशित व्यवहार हो सकता है।
उदाहरण: स्पष्टता के लिए कोष्ठक का उपयोग
// कोष्ठक के बिना (SyntaxError)
// const result = false || null ?? "Default"; // SyntaxError: Unexpected token '??'
// कोष्ठक के साथ (सही)
const result = false || (null ?? "Default");
console.log(result); // आउटपुट: Default
const anotherResult = (false || null) ?? "Default";
console.log(anotherResult); // आउटपुट: null
पहले उदाहरण में, कोष्ठक की कमी के कारण एक SyntaxError
होता है क्योंकि जावास्क्रिप्ट इंजन संचालन के इच्छित क्रम को निर्धारित नहीं कर सकता है। कोष्ठक जोड़कर, हम स्पष्ट रूप से इंजन को पहले नलीश कोलेसिंग ऑपरेटर का मूल्यांकन करने के लिए कहते हैं। दूसरा उदाहरण मान्य है; हालाँकि, आउटपुट अलग है क्योंकि ||
एक्सप्रेशन का मूल्यांकन पहले किया जाता है।
ब्राउज़र संगतता
नलीश कोलेसिंग ऑपरेटर (??
) एक अपेक्षाकृत नई सुविधा है, इसलिए ब्राउज़र संगतता पर विचार करना महत्वपूर्ण है, खासकर यदि आप पुराने ब्राउज़रों को लक्षित कर रहे हैं। अधिकांश आधुनिक ब्राउज़र नलीश कोलेसिंग ऑपरेटर का समर्थन करते हैं, जिनमें शामिल हैं:
- Chrome 80+
- Firefox 72+
- Safari 13.1+
- Edge 80+
- Node.js 14+
यदि आपको पुराने ब्राउज़रों का समर्थन करने की आवश्यकता है, तो आप अपने कोड को जावास्क्रिप्ट के एक संगत संस्करण में बदलने के लिए बेबल (Babel) जैसे ट्रांसपाइलर का उपयोग कर सकते हैं। बेबल ??
ऑपरेटर को समकक्ष जावास्क्रिप्ट कोड में बदल देगा जो पुराने वातावरण में काम करता है।
सर्वोत्तम प्रथाएं
नलीश कोलेसिंग ऑपरेटर का प्रभावी ढंग से उपयोग करने के लिए यहां कुछ सर्वोत्तम प्रथाएं दी गई हैं:
- नलीश जांच के लिए
??
का उपयोग करें: जब आप विशेष रूप से केवल तभी एक डिफ़ॉल्ट वैल्यू प्रदान करना चाहते हैं जब कोई वेरिएबलnull
याundefined
हो, तो नलीश कोलेसिंग ऑपरेटर (??
) का उपयोग करें। - जटिल अभिव्यक्तियों के लिए कोष्ठक का उपयोग करें: जब नलीश कोलेसिंग ऑपरेटर को अन्य लॉजिकल ऑपरेटरों के साथ मिलाते हैं, तो संचालन के क्रम को स्पष्ट रूप से परिभाषित करने के लिए कोष्ठक का उपयोग करें।
- ब्राउज़र संगतता पर विचार करें: ब्राउज़र संगतता की जांच करें और यदि आवश्यक हो तो पुराने ब्राउज़रों का समर्थन करने के लिए एक ट्रांसपाइलर का उपयोग करें।
- लगातार उपयोग करें: पूरे प्रोजेक्ट में अधिक पूर्वानुमानित कोडिंग शैली के लिए जहां उपयुक्त हो,
??
को अपनाएं। - ऑप्शनल चेनिंग के साथ मिलाएं: ऑब्जेक्ट्स की नेस्टेड प्रॉपर्टीज तक सुरक्षित रूप से पहुँचने और डिफ़ॉल्ट वैल्यू निर्दिष्ट करने के लिए ऑप्शनल चेनिंग
?.
के साथ??
का उपयोग करें।
वैश्विक विचार
वैश्विक दर्शकों के लिए विकास करते समय, डिफ़ॉल्ट वैल्यू असाइनमेंट से संबंधित निम्नलिखित बिंदुओं पर विचार करें:
- स्थानीयकरण: डिफ़ॉल्ट वैल्यूज को उपयोगकर्ता की भाषा या क्षेत्र के आधार पर स्थानीयकृत करने की आवश्यकता हो सकती है। उदाहरण के लिए, एक डिफ़ॉल्ट मुद्रा प्रतीक या दिनांक प्रारूप।
- सांस्कृतिक मानदंड: कुछ डिफ़ॉल्ट वैल्यूज को सांस्कृतिक मानदंडों के आधार पर समायोजित करने की आवश्यकता हो सकती है। उदाहरण के लिए, एक डिफ़ॉल्ट अभिवादन संदेश विभिन्न संस्कृतियों में अलग-अलग हो सकता है।
- पहुँच: सुनिश्चित करें कि डिफ़ॉल्ट वैल्यूज विकलांग उपयोगकर्ताओं के लिए सुलभ और समझने योग्य हों। यूजर इंटरफेस में डिफ़ॉल्ट वैल्यूज के लिए स्पष्ट और वर्णनात्मक लेबल प्रदान करें।
- समय क्षेत्र और तिथियाँ: तिथियों और समय के साथ काम करते समय, उपयुक्त समय क्षेत्रों और दिनांक प्रारूपों का उपयोग करें ताकि यह सुनिश्चित हो सके कि डिफ़ॉल्ट वैल्यूज विभिन्न क्षेत्रों के उपयोगकर्ताओं को सही ढंग से प्रदर्शित हों।
उदाहरण: नलीश कोलेसिंग के साथ स्थानीयकरण
मान लीजिए कि आप उपयोगकर्ता के लोकेल के आधार पर विभिन्न भाषाओं में एक डिफ़ॉल्ट स्वागत संदेश प्रदर्शित करना चाहते हैं। यदि स्थानीयकृत संदेश उपलब्ध नहीं है तो आप एक डिफ़ॉल्ट संदेश प्रदान करने के लिए नलीश कोलेसिंग ऑपरेटर का उपयोग कर सकते हैं।
function getWelcomeMessage(locale) {
const localizedMessages = {
en: "Welcome!",
fr: "Bienvenue !",
de: "Willkommen!"
};
const message = localizedMessages[locale] ?? "Welcome!"; // यदि लोकेल नहीं मिलता है तो अंग्रेजी में डिफ़ॉल्ट करें
return message;
}
console.log(getWelcomeMessage("fr")); // आउटपुट: Bienvenue !
console.log(getWelcomeMessage("es")); // आउटपुट: Welcome! (अंग्रेजी में डिफ़ॉल्ट हो रहा है)
निष्कर्ष
नलीश कोलेसिंग ऑपरेटर (??
) जावास्क्रिप्ट भाषा में एक मूल्यवान সংযোজন है। यह OR ऑपरेटर (||
) की तुलना में डिफ़ॉल्ट वैल्यू निर्दिष्ट करने का एक अधिक सटीक और विश्वसनीय तरीका प्रदान करता है, विशेष रूप से जब 0
या खाली स्ट्रिंग्स जैसी वैल्यूज से निपटना हो। इसके सिंटैक्स, व्यवहार और उपयोग के मामलों को समझकर, आप क्लीनर, अधिक रखरखाव योग्य कोड लिख सकते हैं जो डिफ़ॉल्ट वैल्यू असाइनमेंट को सटीक रूप से संभालता है। अपने प्रोजेक्ट्स में नलीश कोलेसिंग ऑपरेटर का उपयोग करते समय ब्राउज़र संगतता, ऑपरेटर प्रेसिडेंस और वैश्विक विचारों पर विचार करना याद रखें।
इस गाइड में उल्लिखित सर्वोत्तम प्रथाओं का पालन करके, आप अपने जावास्क्रिप्ट कोड की गुणवत्ता और विश्वसनीयता में सुधार के लिए नलीश कोलेसिंग ऑपरेटर का प्रभावी ढंग से लाभ उठा सकते हैं, जिससे यह अधिक मजबूत और समझने में आसान हो जाता है। याद रखें कि हमेशा अपने कोड में स्पष्टता और रखरखाव को प्राथमिकता दें, और नलीश कोलेसिंग ऑपरेटर इन लक्ष्यों को प्राप्त करने में एक शक्तिशाली उपकरण हो सकता है।