2013-08-28 1 views
9

मैं हमेशा strict mode में कोड को संरक्षित करने की उम्मीद करता हूं (या कम से कम जबरन रूप से मेरे कोड को बदलने के लिए कहा जाता है) जावास्क्रिप्ट भाषा के साथ समस्याओं से, जैसे बहिष्कृत विधियों या गलत व्याख्यात्मक वाक्यविन्यास का उपयोग करना।अक्षम करें, या कम से कम पता लगाएं, स्वचालित अर्धविराम सम्मिलन

हालांकि मैंने आज this समस्या को मारा और मैं सोच रहा था कि ब्राउज़र में अर्धविराम सम्मिलन को अक्षम करने का कोई तरीका था या अन्यथा समान-से-सख्त-मोड 'संकलन'-समय त्रुटियां हैं?

जेएस [एच/एल] int चुनने में सक्षम नहीं होता है जहां जेएस दुभाषिया सेमीकॉलन डालेंगे और उन्हें कम करने के लिए उन्हें ध्वजांकित करेंगे?


संपादित

JShint और JSLint यदि एक नई लाइन मौजूद है अर्धविराम से पहले एक return कीवर्ड के बाद पाया जाता है दोनों त्रुटि। हालांकि, मुझे स्वचालित प्रविष्टि के संबंध में अन्य चेतावनियों के बारे में पता नहीं है और क्या वे प्रत्येक भी पाए जाते हैं।
भले ही कोई जवाब वास्तव में 'अक्षम करने' भाग को हल करता है, जो अधिक प्रासंगिक होगा।

+0

संबंधित, संभावित रूप से डुप्लिकेट: [एनडीआई को node.js पर रोकने के लिए और क्या यह गलती है?] (Http://stackoverflow.com/q/18070212/464709) –

+1

यह नोड के उत्तरों को प्रतिबंधित नहीं करता है, और वैकल्पिक – Hashbrown

उत्तर

3

return कीवर्ड के बाद अभिव्यक्ति हमेशा उसी पंक्ति पर शुरू होनी चाहिए जो कीवर्ड है, यह दुभाषिया से संबंधित नहीं है, यह ईसीएमएस्क्रिप्ट मानक द्वारा परिभाषित किया गया है, यह भाषा का एक बुरा हिस्सा है, लेकिन यदि आप लिखने के नियमों का सम्मान करते हैं डगलस क्रॉकफोर्ड द्वारा वर्णित जेएस कोड तो आप इसे फिर से सामना नहीं करेंगे।

"जावास्क्रिप्ट: अच्छी पार्ट्स" से डगलस Crockford द्वारा (परिशिष्ट A.3 बेकार पार्ट्स):

जावास्क्रिप्ट एक तंत्र है कि स्वचालित रूप से डालने अर्धविराम से दोषपूर्ण कार्यक्रमों को सही करने की कोशिश करता है। इस पर निर्भर न करें। यह अधिक गंभीर त्रुटियों को मुखौटा कर सकता है।

यह कभी-कभी उन स्थानों पर अर्धविराम डालता है जहां उनका स्वागत नहीं है। रिटर्न स्टेटमेंट पर अर्धविराम सम्मिलन के परिणामों पर विचार करें। एक वापसी कथन एक मूल्य देता है, तो उस मान अभिव्यक्ति वापसी के रूप में एक ही लाइन पर शुरू होगा:

return 
{ 
    status: true 
}; 

यह एक वस्तु एक स्थिति सदस्य युक्त वापस जाने के लिए प्रकट होता है। दुर्भाग्यवश, अर्धविराम सम्मिलन इसे एक ऐसे बयान में बदल देता है जो अनिर्धारित लौटाता है। इस बात की कोई चेतावनी नहीं है कि अर्धविराम सम्मिलन ने कार्यक्रम की गलत व्याख्या की।

return { 
    status: true 
}; 

इसके अलावा जावास्क्रिप्ट के लिए कोड सम्मेलनों देख डगलस Crockford द्वारा: http://javascript.crockford.com/code.html

यदि {अगली पंक्ति की शुरुआत में पिछले पंक्ति के अंत में रखा जाता है और नहीं है समस्या से बचा जा सकता
+0

के रूप में एक कोड निरीक्षण तकनीक के लिए पूछता है हालांकि यह सच है, मुझे संदेह नहीं है कि अन्य चेतावनी भी हैं। भले ही, कम से कम यह देखने के लिए दिलचस्प हो सकता है कि जेएस दुभाषिया हमारे कोड में सामान डाल रहे हैं (यदि कोई स्वचालित समाधान है। विशिष्ट मामलों को सीखने के विरोध में जहां यह होगा) – Hashbrown

+1

@ हैशब्रौन, कृपया मेरा संपादित उत्तर देखें , मुझे किसी भी स्वचालित समाधान के बारे में पता नहीं है, लेकिन यदि आप कोड शैली की तरह जावा का उपयोग करेंगे तो यह समस्या हल हो जाएगी। – micnic

+1

मुझे पता है कि क्या हो रहा है, मैं इसे रोकना चाहता हूं। मैं सम्मिलन पर 'भरोसा नहीं कर रहा हूं', यह मुझे बाधा डाल रहा है। और फिर, प्रश्न पर बिंदु 'रिटर्न' मुद्दे के बारे में नहीं है, जो कि सिर्फ मेरा ध्यान झंडा लगा है, अन्य चीजें भी इसमें शामिल होंगी, साथ ही मैं – Hashbrown

0

बस सोचा कि मैं इस प्रश्न में आने वाले किसी भी व्यक्ति की मदद करूंगा।
मैंने एक परियोजना के लिए जेएस को कम करने के लिए Google के Closure Comiler का उपयोग शुरू कर दिया है और उसने मुझे कुछ आसान चेतावनी दी है।

$> java -jar google_closure_compiler.jar --language_in=ECMASCRIPT5_STRICT --js_output_file 'min.js' 'file1.js' 'file2.js' 
    file1.js:152: WARNING - unreachable code 
       getSomething(function() { return this.doThingo(''); }); 
      ^

    file2.js:203: WARNING - Suspicious code. The result of the 'add' operator is not being used. 
       ' to ' + (typeof obj); 
      ^

    0 error(s), 2 warning(s) 

अपमानजनक कोड ब्लॉकों इस प्रकार थे (टिप्पणियों से बताएं कि कोड याद आ रही थी कि संकलक मेरे लिए सतर्क कर दिया):

file1।js: 150

return generateSomeObject(bunch, of, arguments) 
     //the period before the function call was missing 
     getSomething(function() { return this.doThingo(''); }); 
} 

file2.js: 201

if (someCondition) 
    //trailing plus was missing from this line 
    throw 'Could not set ' + last + ' of ' + (typeof root) 
     ' to ' + (typeof obj); 
return old; 

मैं नहीं जानता कि क्या यह सभी गलतियों पहचान लेगा कि ब्राउज़र को tidies (ताकि मैं शायद के रूप में चिह्नित नहीं होंगे एक उत्तर), लेकिन यह यूयूआई के मिनीफायर से मेरे लिए बहुत कुछ कर रहा था (जो इन सभी मामलों को अनदेखा कर रहा था)।
इसके अलावा, वाईयूआई की तुलना में, कंपाइलर कई फ़ाइल इनपुट ले सकता है और इसलिए मुझे त्रुटियों के लिए प्रति फ़ाइल लाइन नंबर दे सकता है, और debugger कीवर्ड पर पुन: प्रतिक्रिया नहीं करता है)।
उम्मीद है कि यह आपकी भी मदद करेगा।

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