2012-07-19 23 views
20

तो मैं एक आशुलिपि जावास्क्रिप्ट if/else बयान उपयोग कर रहा हूँ (मैंने कहीं पढ़ा है कि वे त्रिगुट बयान बुलाया कर रहे हैं?)जावास्क्रिप्ट आशुलिपि अगर बयान, बाकी भाग

this.dragHandle.hasClass('handle-low') ? direction = "left" : direction = "right"

यह अच्छा काम करता है के बिना, लेकिन क्या होगा यदि बाद में मैं else भाग के बिना, केवल एक शॉर्टेंड if का उपयोग करना चाहता हूं। जैसा:

direction == "right" ? slideOffset += $(".range-slide").width()

यह संभव सब पर है?

+3

इन टुकड़ों के लिए तकनीकी शब्द _conditional expression_ है, जो सशर्त ऑपरेटर_ '?:' का उपयोग करते हैं। चूंकि यह ऑपरेटर तीन ऑपरेंड लेता है, इसे टर्नरी ऑपरेटर कहा जाता है। –

+2

2 गुना तेजी से http://jsperf.com/speed-test-for-conditions –

उत्तर

32

आप && ऑपरेटर का उपयोग कर सकते हैं - दूसरे संकार्य अभिव्यक्ति केवल पहले अगर निष्पादित किया जाता है सच

direction == "right" && slideOffset += $(".range-slide").width() 

मेरी राय में if(conditon) expression से condition && expression

+0

शायद 'if (condition) अभिव्यक्ति 'के साथ चिपक जाएगी - लेकिन इस स्थिति में' && 'ऑपरेटर काम करने के लिए अच्छा है! – ahren

+1

देखो '&&' मेरे लिए तेज़ है http://jsperf.com/speed-test-for-conditions –

+0

मैंने डबल कोट्स से पहले उपयोग किया है और काम किया है ... >>> दिशा == "दाएं" जैसे कुछ? स्लाइडऑफसेट + = $ ("रेंज-स्लाइड")। चौड़ाई(): "" .... तो क्या इससे कोई समस्या आती है? – hsobhy

2

नहीं, यह संभव नहीं है, क्योंकि टर्नरी ऑपरेटर की आवश्यकता होती है, इसके साथ तीन ऑपरेंड होते हैं।

first-operand ? second-operand (if first evaluates to true) : third-operand (if false) 
2

जो आपने काम नहीं किया है, लेकिन इसके बजाय यदि कथन के बजाय केवल एक पंक्ति का उपयोग न करें।

if(direction == "right") slideOffset += $(".range-slide").width();

इस विधि रे सुझाव दिया की तुलना में कम टाइपिंग शामिल है। बेशक उसका जवाब मान्य है यदि आप वास्तव में उस प्रारूप में रहना चाहते हैं।

0

यही आपके प्रश्न का उत्तर नहीं है, लेकिन ternaries आप कम लिखने के लिए की तुलना में आप दिखाया है की अनुमति देते हैं:

direction = this.dragHandle.hasClass('handle-low') ? "left" : "right"; 

और अब मैं इसके बारे में लगता है कि, हाँ, आप अपने प्रश्न भी कर सकते हैं:

slideOffset + direction == "right" ? = $(".range-slide").width() : = 0; 

यह एक सिद्धांत है। अगली बार जब मुझे += एक टर्नरी का मौका मिलेगा तो मैं इसे आजमाउंगा। मुझे बताएं कि यह कैसे काम करता है!

+0

मजाकिया बात यह है कि काम कर सकता है। मुझे इस साइट को पसंद नहीं करना शुरू हो रहा है – Dale

+0

शीर्ष पंक्ति बिल्कुल काम करती है – Dale

9

एक नियंत्रण की तरह इसके बारे में मत सोचो अधिक पठनीय है ब्लॉक (यानी: अगर कोई और कोई स्विच)। यह वास्तव में इसके अंदर कोड चलाने के लिए नहीं है।

आप कर सकते हैं। यह बहुत बदसूरत, बहुत तेज हो जाता है, जो उद्देश्य को हरा देता है।

क्या तुम सच में करने के लिए इसका उपयोग करना चाहते बताए मूल्यों है।

अपने प्रारंभिक उदाहरण लें और एक छोटे से अपने सिर पर यह मोड़, आपको मिलता है:

direction = (this.dragHandle.hasClass("handle-low")) ? "left" : "right"; 

देखें। अब मैंने जो किया है वह है कि मैंने ऐसा कुछ लिया है जिसके लिए एक if/else या स्विच की आवश्यकता होती, जिसे उस मान को असाइन करने के लिए उपयोग किया जाता था, और मैंने इसे अच्छी और सुंदर बना दिया है।

तुम भी एक else if-त्रिगुट के प्रकार के कर सकते हैं:

y = (x === 2) ? 1 : (x === 3) ? 2 : (x === 4) ? 7 : 1000; 

तुम भी यदि आप चाहें, कोड आग के लिए इसका इस्तेमाल कर सकते हैं, लेकिन यह कुछ समय के बाद वास्तव में मुश्किल हो जाता है, क्या पता करने के लिए कहाँ जा (पिछले उदाहरण देखते हैं कि कैसे भी काम एक नज़र में अजीब लग रही शुरू कर सकते हैं देखने के लिए) ...

((this.dragHandle.hasClass("...")) ? fireMe(something) : noMe(somethingElse)); 

... इस आम तौर पर काम करेंगे।

लेकिन यह वास्तव में किसी भी शाखा या शाखा के मुकाबले कोई सुंदर या अधिक उपयोगी नहीं है, तत्काल-चालान समारोह (और गैर-जेएस प्रोग्रामर, या अनियंत्रित जेएस प्रोग्रामर स्वयं को अपना कोड बनाए रखने की कोशिश कर रहे हैं)।

+1

"_untrained जेएस प्रोग्रामर खुद को अपने कोड_ को बनाए रखने की कोशिश कर रहे हैं" मैं इसे बेहतर नहीं कह सकता था – ajax333221

2

सशर्त ऑपरेटर if कथन के लिए एक शॉर्टेंड नहीं है। यह एक ऑपरेटर है, एक बयान नहीं।

यदि आप इसका उपयोग करते हैं, तो आपको इसे एक ऑपरेटर के रूप में उपयोग करना चाहिए, कथन के रूप में नहीं।

बस तीसरे संकार्य के लिए एक शून्य मान का उपयोग करें:

slideOffset += direction == "right" ? $(".range-slide").width() : 0; 
0

मैं एक ऐसी ही मामले में जहां मैं केवल if भाग कॉल करने के लिए मिल गयी। तार्किक & & (और) ऑपरेटर का उपयोग करके प्राप्त किया गया।

var name = "michael"; 

var doSomething = function() { 
    return (name === "michael") && console.log("name is valid"); 
}; 

doSomething(); // will log name is valid else returns undefined but is disposed of since we never store it. 
संबंधित मुद्दे