सबसे पहले, एक ternary अभिव्यक्ति एक if / else निर्माण के लिए एक प्रतिस्थापन नहीं है - इसका एक if / if निर्माण के बराबर है जो मान लौटाता है। यही है, यदि एक / और क्लॉज कोड है, एक टर्नरी अभिव्यक्ति एक अभिव्यक्ति है , जिसका अर्थ है कि यह एक मूल्य लौटाता है।
इसका मतलब है कई चीजें:
- जब आपके पास बाईं ओर एक चर है, तो टर्नरी अभिव्यक्तियों का उपयोग करें, जो
=
कि रिटर्न मान को सौंपा जाना है
- केवल लौकिक भावों का उपयोग करें जब लौटा हुआ मूल्य दो मानों में से एक हो (या फिटिंग हो तो नेस्टेड अभिव्यक्तियों का उपयोग करें)
- अभिव्यक्ति के प्रत्येक भाग (बाद में और बाद में) को साइड इफेक्ट्स के बिना एक मान लौटना चाहिए (अभिव्यक्ति
x = true
सही है क्योंकि सभी अभिव्यक्तियाँ अंतिम मान लौटाती हैं, लेकिन एक्स के बिना एक्स भी बदले हुए मूल्य पर कोई प्रभाव नहीं डालता है)
संक्षेप में - एक टर्नरी अभिव्यक्ति का 'सही' उपयोग है
var resultofexpression = conditionasboolean ? truepart: falsepart;
अपने उदाहरण के बजाय condition ? x=true : null ;
, जहां आप मूल्य का निर्धारण करने के लिए एक टर्नरी अभिव्यक्ति का x
उपयोग करते हैं, आप इसका उपयोग कर सकते हैं:
condition && (x = true);
यह अभी भी एक अभिव्यक्ति है और इसलिए सत्यापन पारित नहीं हो सकता है, इसलिए एक बेहतर दृष्टिकोण होगा
void(condition && x = true);
अंतिम सत्यापन पास होगा।
लेकिन फिर, यदि अपेक्षित मूल्य एक बूलियन है, तो केवल स्थिति अभिव्यक्ति के परिणाम का उपयोग करें
var x = (condition); // var x = (foo == "bar");
अद्यतन
अपने नमूने के संबंध में यह संभवतः अधिक उपयुक्त है:
defaults.slideshowWidth = defaults.slideshowWidth || obj.find('img').width()+'px';
condition ? x = true : null;
संभवतः लिखा जाना चाहिएx = (condition ? true : null);
। एक तरफ के रूप में, जावास्क्रिप्टnull
में इस तरह के झूठे का मूल्यांकन करता है ताकि आपx = (condition);
उसी परिणाम को प्राप्त कर सकें ।