2015-08-03 8 views
5

मैं भाग गया (द्वितीय/या ऑपरेटर के अजीब उपयोग):जावास्क्रिप्ट लघु सर्किट कोड के इस टुकड़े में

<a ng-click= "item.statusId !== itemStatus.in || transfer()"> 

मुझे लगता है कि हम के रूप में सामान्यीकरण कर सकते हैं:

<element ng-click = "someVar !== someValue || doStuff()"> 

मैं तो इस article on short circuits पाया और एक और more focused one एक बार मुझे पता था कि उन्हें क्या कहा जाता है। हालांकि, मुझे अभी भी यह नहीं मिला है।

क्या यह मूल रूप से मूल्यांकन के समाप्त होने वाले एक या कथन के सिद्धांत पर काम करता है यदि पहला कथन सही साबित होता है? तो यदि पहला कथन सत्य है, तो अंतिम मूल्यांकन, यदि यह गलत है, तो या कथन के दूसरे भाग में फ़ंक्शन चलाएं? (यह मुख्य प्रश्न है जो मैं पूछ रहा हूं, बाकी सब कुछ अतिरिक्त है)।

मुझे लगता है कि मुझे यह हिस्सा नहीं मिलता है कि संकलक इस कोड को अलग-अलग समझता है या फिर भी यह झूठे का मूल्यांकन करता है और केवल फ़ंक्शन चलाता है। यह भी सुनिश्चित नहीं है कि वाक्यांश कैसे करें Q.

उत्तर

3

क्या यह मूल रूप से मूल्यांकन के समाप्त होने वाले मूल्यांकन के सिद्धांत पर काम करता है यदि पहला कथन सही साबित होता है? तो यदि पहला कथन सत्य है, तो अंतिम मूल्यांकन, यदि यह गलत है, तो या कथन के दूसरे भाग में फ़ंक्शन चलाएं?

यह प्रभावी रूप से एक कथन के लिए शॉर्टेंड है, और आपने सही तरीके से अंतर्ज्ञान किया है कि यह क्यों काम करता है। जावास्क्रिप्ट में शॉर्ट-सर्किट मूल्यांकन पर अधिक जानकारी के लिए, this Stack Overflow question देखें।

//Note the intentional and explicit use of `== false` to mean falsy (NOT `=== false` to indicate strict equality test for false) 
if((item.statusId !== itemStatus.in) == false) { 
transfer(); 
} 

यह एक समारोह केवल जब एक शर्त falsy है क्रियान्वित करने का एक दिलचस्प साधन है:

+0

धन्यवाद, मैंने पहले ही पढ़ा है। मैं समझता हूं कि यह क्यों काम करता है, मोटे तौर पर। क्या इसका इस्तेमाल करने का बुरा अभ्यास है? – VSO

+0

@ वीएसओ सर्वसम्मति की तरह दिखता है कि [इसे नियंत्रण संरचना के रूप में उपयोग करने के लिए बहुत अच्छा अभ्यास नहीं है] (https://programmers.stackexchange.com/questions/109138/is-it-bad-practice-to-use -शॉर्ट-सर्किट-मूल्यांकन-इसके बजाए एक-अगर-खंड) जैसे। –

+0

ऐसा लगता है कि "कूल बच्चे" उस लिंक को पढ़ने से क्या उपयोग करते हैं। मुझे कोई गंभीर शिकायत नहीं दिखाई दे रही है, लेकिन इससे पहले मुझे भ्रमित कर दिया गया था, इसलिए पदों को यह कहते हुए कि नोबस भ्रमित हैं वैध हैं =) वैसे भी, मदद के लिए धन्यवाद। – VSO

1

कि कोड के बराबर है।

लगभग on StackOverflow this की many अलग examples कर रहे हैं, और AngularJS के लिए विशिष्ट नहीं है।

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