जावास्क्रिप्ट में प्रश्न चिह्न और बृहदान्त्र


249

मैं निम्नलिखित पंक्ति में आया

hsb.s = max != 0 ? 255 * delta / max : 0;

इस संदर्भ में क्या ?और क्या :मतलब है?


लग रहा है कि संतृप्ति को Infinityविभाजित करने से बचें (डिवाइड-बाय-शून्य के कारण)।
क्रीसेंट फ्रेश

जवाबों:


363

यह कहा जाता है सशर्त ऑपरेटर (जो एक है त्रिगुट ऑपरेटर )।

इसका रूप है condition:? value-if-true: "तब" और "अन्य" value-if-false
के ?रूप में सोचें :

आपके कोड के बराबर है

if (max != 0)
  hsb.s = 255 * delta / max;
else
  hsb.s = 0;

27
"?" टर्नरी ऑपरेटर नहीं है; "?:" टर्नरी ऑपरेटर है। के बारे में बातें कर रहे हैं "?" के रूप में टेनेरी ऑपरेटर कॉस्टेलो के बिना एबट के बारे में बात करने जैसा है, लॉरेल बिना हार्डी, चेच बिना चोंग ....
जेसन एस

11
ठीक है, ठीक है ... अब मैं एक अस्पष्ट सर्वनाम का उपयोग कर रहा हूँ, खुश? :)
ग्रेग

14
पांडित्यपूर्ण होने के लिए, यह एक टर्नरी ऑपरेटर है, जो अधिकांश प्रोग्रामिंग भाषाओं में केवल एक ही होता है। कोई भी ऑपरेटर जो 3 भागों पर काम करता है, एक टर्नरी ऑपरेटर है, जैसे additionएक बाइनरी ऑपरेटर है जो पूर्ववर्ती और निम्न अभिव्यक्तियों पर काम करता है (जैसे 1 + 2 प्लस 1 और 2 पर संचालित होता है), या नकार एक अपर ऑपरेटर है (जैसे-x जहां x का मान नकारा जाता है)।
डेवि 8

6
@ डेवी 8: और इसे विशिष्ट होने के लिए सशर्त-ऑपरेटर कहा जा सकता है ।
मैकेनिकल घोंघा

यदि आप दो स्थितियों की जाँच करना चाहते हैं तो क्या होगा?
थानोस डोड

38

स्पष्टता के लिए उचित रूप से कोष्ठक, यह है

hsb.s = (max != 0) ? (255 * delta / max) : 0;

मतलब या तो लौटो

  • 255*delta/max अगर अधिकतम! = ०
  • 0 यदि अधिकतम == ०

7

यह संभवतः थोड़ा स्पष्ट है जब कोष्ठक के साथ लिखा जाता है:

hsb.s = (max != 0) ? (255 * delta / max) : 0;

यह क्या करता है पहले कोष्ठक में भाग का मूल्यांकन करें। यदि परिणाम सत्य है तो उसके बाद का हिस्सा? और इससे पहले: वापस आ गया है। यदि यह गलत है, तो निम्नानुसार है: लौटा दिया गया है।


7
hsb.s = max != 0 ? 255 * delta / max : 0;

?एक टर्नरी ऑपरेटर है। यह ifके साथ संयोजन के रूप में काम करता है:

!= इसका मतलब नहीं के बराबर है

तो, इस लाइन का लंबा रूप होगा

if (max != 0) { //if max is not zero
  hsb.s = 255 * delta / max;
} else {
  hsb.s = 0;
}

1

? : क्या यह टर्नरी ऑपरेटर नहीं है?

var x= expression ? true:false


3
यह इसके उपयोग का एक उदाहरण है, लेकिन वास्तव में आपके बयान का एक छोटा संस्करण है, उन मामलों के लिए जहां आप सिर्फ TRUE / FALSE चाहते हैं: यदि 'अभिव्यक्ति' बस एक संख्या या स्ट्रिंग के साथ कुछ चर था, तो "var x = !!" अभिव्यक्ति "यह एक बूलियन परिणाम में कर देगा।
स्कॉट लाहटेइन


-3

इससे सावधान रहें। एक -1 सच का मूल्यांकन करता है, हालांकि -1! = सच और -1! = असत्य। मेरा विश्वास करो, मैंने देखा है ऐसा होता है।

इसलिए

-1? "सत्य पक्ष": "गलत पक्ष"

"सही पक्ष" का मूल्यांकन


3
"में जावास्क्रिप्ट, एक truthy (शून्य, अपरिभाषित", और NaN मूल्य है कि सच है जब एक बूलियन संदर्भ में मूल्यांकन में माना जाता है एक मूल्य के झूठे, 0, के लिए छोड़कर, यानी) है। सभी मान जब तक कि वे falsy के रूप में परिभाषित कर रहे हैं truthy रहे हैं " । " यही कारण है कि -1 का मूल्यांकन सही है। ( developer.mozilla.org/en-US/docs/Glossary/Truthy )
जॉबमो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.