2011-12-14 14 views
20

के साथ जेएस कथन विभाजक मुझे निम्नलिखित जेएस नमूना मिला और वाक्यविन्यास से उलझन में है। ध्यान दें कि बयान अर्धविरामों के बजाय अल्पविराम से अलग होते हैं। क्या अल्पसंख्यक जेएस में एक वैध कथन विभाजक हैं? मैंने पहले यह नहीं देखा है।कमांड

$('selector').each(function() { 

      this.onclick = function() { 
       this.select(); 
      }, 

      this.onblur = function() { 
      }, 

      this.onfocus = function() { 
      }, 

      this.onkeyup = function() { 
      } 
    }); 

उत्तर

18

कॉमा एक अभिव्यक्ति कथन में अभिव्यक्तियों के बीच विभाजक के रूप में कार्य करता है। इस प्रकार, (अगर यह "ऑनकीप" फ़ंक्शन के बाद कट ऑफ होने के बजाय पूरा हो गया था) केवल एक अभिव्यक्ति कथन है।

इस तरह के कोड को वास्तव में कोई कारण नहीं है, या कम से कम कोई अच्छा कारण नहीं है। इस विशेष मामले में यह अनिवार्य रूप से वही प्रभाव होता है जैसे अर्धविराम से अलग अलग अभिव्यक्ति बयान की एक श्रृंखला होगी।

अल्पविराम "ऑपरेटर" कभी कभी कई मामलों में संदिग्ध लेकिन उपयोगी है:

var index, len; 
for (index = 0, len = list.length; index < len; ++index) { ... } 
उदाहरण के लिए

। यह एक व्याकरणिक लोकेल में एक से अधिक अभिव्यक्तियों (आमतौर पर असाइनमेंट) को छोड़ने की अनुमति देता है जो केवल एक अभिव्यक्ति की अनुमति देता है। यह वास्तव में मेरी राय में वाक्य रचनात्मक कमजोरी का संकेत है।

+4

नोट: यदि कोई अल्पविराम ऑपरेटरों में रूचि रखता है - देखें [यह] (http://javascriptweblog.wordpress.com/2011/04/04/the-javascript-comma-operator/)। – kubetz

+2

विशिष्टता: http://ecma262-5.com/ELS5_HTML.htm#Section_11.14 –

+1

@dzejkej जेएस nuances सीखने के लिए महान साइट! शैली मुझे पुराने सी प्राइमर और सी ++ प्राइमर प्लस किताबों को दिन में वापस याद दिलाती है। –

9

प्रत्येक असाइनमेंट वास्तव में एक अभिव्यक्ति है (एक बयान नहीं); और अभिव्यक्तियों को एक बड़ी अभिव्यक्ति में संयोजित किया जा सकता है, जिसका परम मूल्य केवल अंतिम उप अभिव्यक्ति का मूल्य है; जैसे

alert( (w=1+1, x=2+3, y=3+3, z=4+4) ); // shows 8 

हालांकि कोड आप से पता चला है मान्य है, मुझे नहीं लगता कि यह एक अच्छा पैटर्न का पालन करने के लिए है। मैं इसे अर्धविराम में बदल दूंगा।