2012-03-26 18 views
36

सी # आप निम्न कर सकते हैं:जावास्क्रिप्ट में नल-कोलेसिंग?

string y = null; 
string x = y ?? "sup stallion"; //x = "sup stallion" since y is null. 

कहाँ ?? ऑपरेटर अशक्त-कोलेसिंग ऑपरेटर है।

और जावास्क्रिप्ट में मैं ऐसी ही कुछ देखा है:

var headers; 
var myHeader = headers || {'Content-type':'text/plain'}; //myHeaders = {'Content... 

I've also seen: (The 2nd code snippet on the page)

var headers; 
var myHeader = headers | {'Content-type':'text/plain'}; 

दोनों के बीच एक अंतर है? इस पैटर्न को क्या कहा जाता है ... डिफ़ॉल्ट पैरामीटर?

+3

आप चाहते हैं '||' –

+0

टाइपो, यह '||' – qwertymk

+1

संभव डुप्लिकेट होना चाहिए [क्या जावास्क्रिप्ट में कोई "शून्य सहकारी" ऑपरेटर है?] (http://stackoverflow.com/questions/476436/is-there-a-null-coalescing-operator-in-javascript) –

उत्तर

34

|| एक logical or है। यह पहला सच्चाई ऑपरेंड * (अंतिम मूल्य मूल्यांकन) देता है। तो

var myHeader = headers || {'Content-type':'text/plain'}; 

रिटर्न "हेडर" यह truthy है (और अगर यह अशक्त या अपरिभाषित है, कि मूल्य "गलत" में coreced जाता है) है। यदि यह झूठा है, तो यह दूसरा ऑपरेंड देता है। मुझे विश्वास नहीं है कि जावास्क्रिप्ट में इसका एक बहुत ही विशिष्ट नाम है, बस कुछ सामान्य "डिफ़ॉल्ट तर्क मान" जैसा है।

|bitwise or है। यह एक गणितीय ऑपरेशन है और कुछ पूरी तरह से अलग करता है। वह ऑपरेटर यहां भी समझ में नहीं आता है (और परिणामस्वरूप यह आमतौर पर केवल 0 उत्पन्न करेगा)। जहां भी आपने देखा, यह निश्चित रूप से एक टाइपो था, और वे तार्किक या उपयोग करने के लिए मतलब था।

तो उस पहले विधि (a = b || c) के साथ जाएं।

* "तार्किक या" को "तार्किक संयोजन" या "समावेशी संयोजन" के रूप में भी जाना जाता है। जावास्क्रिप्ट, सभी प्रोग्रामिंग भाषाओं की तरह, short-circuit evaluation का उपयोग करके तार्किक वक्तव्य का मूल्यांकन करता है। तार्किक-अभिव्यक्तियों के साथ, यह सच्चाई के लिए प्रत्येक ऑपरेंड का मूल्यांकन करता है और पहले सत्य पर रोकता है (और वह मान देता है)। यदि कोई सच्चाई ऑपरेंड नहीं है, तो उसे अभी भी उन सभी के माध्यम से जाना होगा, इसलिए यह आखिरी ऑपरेंड लौटाता है, फिर भी आखिरी बार इसका मूल्यांकन किया जाता है। तार्किक और (& &) पहले झूठी ऑपरेंड पर रोककर समान रूप से संक्षिप्त सर्किट है।

+0

मैंने मूल प्रश्न का एक लिंक जोड़ा। लेकिन यहाँ यह है: http://csausdev.wordpress.com/2010/12/17/dependency-injection-in-node-js/ – Alan

+0

मैं जानता हूँ कि सामान्य रूप में पसंद करते हैं कि '' === प्रकार बलात्कार को रोकने के लिए है, लेकिन में यह मामला, यह स्वीकार्य जावास्क्रिप्ट है, या क्या मैं एक बुरी आदत सीख रहा हूं? – Alan

+0

@ एलन, आप सही हैं कि प्रकार का दबाव आमतौर पर टालना है, लेकिन यह अल्पसंख्यक मामलों में से एक है जहां यह आमतौर पर * ठीक है। अपवाद तब होता है जब "डिफ़ॉल्ट" मान कुछ गलत हो सकता है (उदाहरण के लिए शाब्दिक "झूठा" बनाम "अपरिभाषित" उदाहरण के लिए)। उस स्थिति में, आप टर्नरी सशर्त ऑपरेटर का उपयोग करना चाहेंगे। –

2

नहीं वास्तव में इस के लिए एक विशेषज्ञ लेकिन || एक Logical Operator है और | एक Bitwise Operator

+0

हां, लेकिन मूल्य/वस्तुओं में 'सत्यता' है। – dwerner

3

मैं दूसरे पैटर्न से परिचित नहीं हूं। दो पैटर्न मुझे पता है:

1) आपका पहला पैटर्न मूल तार्किक या ऑपरेटर है। यदि पहला मान गलत है तो दूसरा मान असाइन किया गया है।

2) दूसरे पैटर्न को टर्नरी असाइनमेंट कहा जाता है, जो स्थिति में मूलभूत स्थिति में समान है, लेकिन वाक्यविन्यास थोड़ा अलग है।

var test = (typeof myTest === "string") ? firstValue : secondValue; 

इस पैटर्न में प्रश्न चिह्न मूल्यों से स्थिति को अलग करता है और कोलन मूल्यों को अलग करता है। तृतीयक असाइनमेंट को घोंसला दिया जा सकता है ताकि मूल्यों में से एक में एक और तृतीयक हो।

+1

टर्नरी ** नहीं तृतीयक – Joe

+0

@ जो वर्तनी पाठ के लिए धन्यवाद –

+1

@ जॉनी 5 इसकी वर्तनी गलती नहीं है, यह गलत शब्द है। – Murph

संबंधित मुद्दे