ऑप्शनल चेनिंग ?.
और न्यूलल कोलेसिंग??
अब आप सीधे ?.
अस्तित्व के लिए सुरक्षित रूप से परीक्षण करने के लिए इनलाइन का उपयोग कर सकते हैं । सभी आधुनिक ब्राउज़र इसका समर्थन करते हैं।
??
एक डिफ़ॉल्ट मान सेट करने के लिए इस्तेमाल किया जा सकता है अगर अपरिभाषित या अशक्त।
aThing = possiblyNull ?? aThing
aThing = a?.b?.c ?? possiblyNullFallback ?? aThing
यदि कोई संपत्ति मौजूद है, ?.
तो अगले चेक के लिए आगे बढ़ता है, या वैध मूल्य लौटाता है। कोई भी विफलता तुरंत शॉर्ट-सर्किट और वापस आ जाएगी undefined
।
const example = {a: ["first", {b:3}, false]}
example?.a // ["first", {b:3}, false]
example?.b // undefined
example?.a?.[0] // "first"
example?.a?.[1]?.a // undefined
example?.a?.[1]?.b // 3
domElement?.parentElement?.children?.[3]?.nextElementSibling
null?.() // undefined
validFunction?.() // result
(() => {return 1})?.() // 1
एक डिफ़ॉल्ट परिभाषित मूल्य सुनिश्चित करने के लिए, आप उपयोग कर सकते हैं ??
। यदि आपको पहले सत्य मूल्य की आवश्यकता है, तो आप उपयोग कर सकते हैं ||
।
example?.c ?? "c" // "c"
example?.c || "c" // "c"
example?.a?.[2] ?? 2 // false
example?.a?.[2] || 2 // 2
यदि आप किसी मामले की जांच नहीं करते हैं, तो बाईं ओर की संपत्ति मौजूद होनी चाहिए। यदि नहीं, तो यह एक अपवाद फेंक देगा।
example?.First // undefined
example?.First.Second // Uncaught TypeError: Cannot read property 'Second' of undefined
?.
ब्राउज़र समर्थन - 78%, जुलाई 2020
??
ब्राउज़र समर्थन - 78%
मोज़िला प्रलेखन
-
तार्किक nullish असाइनमेंट, 2020+ समाधान
नए ऑपरेटर वर्तमान में ब्राउज़रों में जोड़े जा रहे हैं ??=
, ||=
और &&=
। वे वह नहीं करते हैं जो आप खोज रहे हैं, लेकिन आपके कोड के उद्देश्य के आधार पर एक ही परिणाम हो सकता है।
नोट: ये अभी तक सार्वजनिक ब्राउज़र संस्करणों में आम नहीं हैं , लेकिन बैबेल को अच्छी तरह से ट्रांसपाइल करना चाहिए। उपलब्धता परिवर्तन के रूप में अद्यतन करेगा।
??=
यदि पहले से परिभाषित है, तो बाईं ओर अपरिभाषित या अशक्त, शॉर्ट-सर्किटिंग की जाँच करता है। यदि नहीं, तो बाईं ओर को दाईं ओर मान असाइन किया गया है। ||=
और &&=
समान हैं, लेकिन ऑपरेटरों ||
और &&
ऑपरेटरों के आधार पर ।
मूल उदाहरण
let a // undefined
let b = null
let c = false
a ??= true // true
b ??= true // true
c ??= true // false
ऑब्जेक्ट / एरे उदाहरण
let x = ["foo"]
let y = { foo: "fizz" }
x[0] ??= "bar" // "foo"
x[1] ??= "bar" // "bar"
y.foo ??= "buzz" // "fizz"
y.bar ??= "buzz" // "buzz"
x // Array [ "foo", "bar" ]
y // Object { foo: "fizz", bar: "buzz" }
ब्राउज़र समर्थन जुलाई 2020 - .03%
मोज़िला प्रलेखन
if( obj?.nested?.property?.value )
बजायif( obj && obj.nested && obj.nested.property && obj.nested.property.value )