2012-06-22 28 views
26

तो, मैं तर्कसंगत ऑपरेटर के साथ एक और अधिक कथन में थोड़ा और जटिल संचालन लिख रहा हूं। मुझे पता है कि मैं ब्रांड्स कर सकता हूं, और मुझे पता है कि यह करने का यह बेहतर तरीका है, लेकिन मुझे उत्सुकता मिली है और इसलिए मैं पूछने जा रहा हूं। अगर मुझे ऐसा कुछ करना था:कौन सा लॉजिक ऑपरेटर प्राथमिकता लेता है

if (firstRun == true || selectedCategory != undefined && selectedState != undefined) { 
//Do something 
} else { 
//Do something else 
} 

इसे ब्रांड्स के उपयोग के बिना कैसे संचालित किया जाएगा? मुझे पता है कि तर्क ऑपरेटरों के लिए ऑपरेशन का एक आदेश है, पेम्डास के समान, है ना? मैं उत्सुक हूँ अगर यह कुछ इस तरह भागा कर दिया जाएगा:

firstRun == true || (selectedCategory != undefined && selectedState != undefined) 

या हो सकता है 'या' ऑपरेटर बजाय पूर्वता लेता है और ऐसा लगता है के लिए जा रहा समाप्त होता है यदि:

(firstRun == true || selectedCategory != undefined) && selectedState != undefined 

पूरी सूची होगा अच्छा हो, अगर आप इसके लिए संचालन के आदेश के कहीं कहीं इसे पा सकते हैं। धन्यवाद!

उत्तर

44

अंगूठे का मेरा नियम है, जो सशर्त बयानों के लिए सभी उपयोग के मामलों की मूल रूप से 99% को शामिल किया गया, यह है:

  1. समूहीकरण: ()
  2. सदस्य पहुँच . or [...]
  3. नहीं: !
  4. तुलना, जैसे Javascript Operator Precedence

    अपने उदाहरण के लिए इतना

    :

    (firstRun == true || selectedCategory != undefined && selectedState != undefined) 
    

    के बराबर होती है

  5. तार्किक और &&
  6. तार्किक या ||

MDN आप संपूर्ण टूटने देता है

उपरोक्त उल्लिखित मामलों की तुलना में कुछ और जटिल के लिए मैं वैसे भी पढ़ने योग्यता के लिए कोड को दोबारा सुधारना चाहता हूं!

+0

बिल्कुल वांछित क्या था; धन्यवाद – JTApps

+0

'new' के बारे में क्या? सदस्य की पहुंच और फ़ंक्शन कॉल के समान ही प्राथमिकता है, इसलिए मुझे लगता है कि इसका मतलब बाएं से दाएं है? 'नया फू()। बार()' '(नया फू()) बराबर है। बार()'? और 'नया फू() (3) '' (नया फू()) (3) 'के बराबर है? – chharvey

2

https://developer.mozilla.org/en/JavaScript/Reference/Operators/Operator_Precedence

&&|| से पहले है, इसलिए अपने अभिव्यक्ति के बराबर है: यह पहली बार होगा

firstRun == true || (selectedCategory != undefined && selectedState != undefined) 
+0

सटीक रूप से मुझे जो चाहिए, आपको भी धन्यवाद, – JTApps

1

:

firstRun == true || (selectedCategory != undefined && selectedState != undefined) 

सबसे प्रोग्रामिंग भाषाओं में एक सामान्य नियम के रूप में और उच्च प्राथमिकता

7
है

this chart for precedence देखें।

मैं यह बताने वाला नहीं हूं कि क्या होता है क्योंकि आपका कोड पढ़ने वाला अगला व्यक्ति सोचता है: "डब्ल्यूटीएफ? क्या ऐसा करता है?"

तो बेहतर समाधान कोष्ठकों आप पूर्वता पता भले ही में मामले रैप करने के लिए है, यह सही ढंग से लागू और कोड काम करता है

इस पुराने ज्ञान है कि आप सब कुछ ऐसा नहीं करना चाहिए इस प्रकार है आप सिर्फ इसलिए कि आप यह कर सकते हैं। हमेशा एक आँख परिणामों पर रख सकते हैं।

+0

+1 कोष्ठक के उपयोग की सलाह देने के लिए। – geekchic

+0

हाँ, मैं समझता हूं कि आप क्या कह रहे हैं और मुझे पता है, मेरे लिए पूछने का मुद्दा किसी भी चीज़ से व्यक्तिगत ज्ञान के लिए अधिक था। धन्यवाद – JTApps

1

जबकि लॉजिकल ऑपरेटर पूर्वता वास्तव में ECMAScript Specification में परिभाषित नहीं है, MDN इसके बारे में एक बहुत अच्छा काम करता है और यहां तक ​​कि Logical Operators के लिए एक अलग पृष्ठ है।

मेरी चिंता मुझे लगता है, क्योंकि लॉजिकल ऑपरेटर प्राथमिकता वास्तव में ईसीएमएस्क्रिप्ट विशिष्टता में परिभाषित नहीं है, प्रत्येक व्यक्तिगत ब्राउज़र विक्रेता संभावित रूप से अलग हो सकता है (मैं आपसे बात कर रहा हूं, इंटरनेट एक्सप्लोरर!) तो वाईएमएमवी।

घटना किसी में, विभिन्न ब्राउज़र में इस परीक्षण करना चाहता है यहाँ एक टेस्ट केस बेला है: http://jsfiddle.net/HdzXq/

6

यह करने के लिए अंगूठे का एक बहुत अच्छा नियम है। गणितीय लोगों के रूप में इन ऑपरेटरों के बारे में सोचो:

  • AND गुणा है (। जैसे 0 * 1 = 0 => FALSE)
  • OR जोड़ रहा है

जब आप यह याद है, तुम सब है पता करने के लिए (जैसे 0 + 1 = 1 => TRUE।) यह है कि गुणा हमेशा से पहले आता है।

+1

यह वास्तव में सटीकता के साथ-साथ परिणामस्वरूप बिट्स के मूल्यों के संदर्भ में वास्तव में एक अच्छा निमोनिक है! – Christoph