2011-11-12 14 views
18

जिशिंट को खुश करने के लिए मुझे इन पंक्तियों को संशोधित करने की आवश्यकता कैसे है?jshint अभिव्यक्ति के रूप में असाइनमेंट को क्यों पहचानता है?

एक असाइनमेंट एक अभिव्यक्ति है। Jshint यह समझ क्यों नहीं है? जाहिर है दुभाषिया करता है। options साथ

Line 572: while(bookmark_element=bookmark_list[iterator++]) 

Expected a conditional expression and instead saw an assignment. 


Line 582: while(bookmark_element=bookmark_list[iterator++]) 

Expected a conditional expression and instead saw an assignment. 


Line 623: while(element_iterator=element_iterator.nextSibling) 

Expected a conditional expression and instead saw an assignment. 
+0

मैं बूल कैसे लगा सकता हूं? –

उत्तर

19

तुम सच में, JSHint को सुनने के द्वारा एक बूलियन को अभिव्यक्ति कन्वर्ट करने के लिए करना चाहते हैं:

while (!!(bookmark_element=bookmark_list[iterator++])) 

! means: Something that evaluates to true is converted to false, 
     something that evaluates to false is converted to true. 

तो, !! का अर्थ है: सशर्त प्रतिनिधित्व करने के लिए कुछ बदलें।

+0

सबसे आसान..तो मैं इसके साथ गया। –

+0

क्या जावास्क्रिप्ट के प्रकार के बूल के लिए एक कलाकार है ... कभी और अधिक प्रत्यक्ष? –

+0

@ stack.user.0 '!!' से अधिक प्रत्यक्ष? यह जितना प्रत्यक्ष हो जाता है उतना ही है: जावास्क्रिप्ट सच्चा/झूठा है, अगर आप एक वास्तविक बूलियन चाहते हैं, तो !! !! आपकी सबसे आसान शर्त है। –

19
/*jshint boss:true */ 

प्रयोग।

13

मुझे यकीन है कि jshint अभिव्यक्ति को समझता है, यह केवल इतना है कि if (a = b) लिखने वाले अधिकांश लोग वास्तव में if (a == b) लिखते थे और इसलिए यह एक चेतावनी उत्पन्न करता है। इसलिए जैसे

while ((element_iterator = element_iterator.nextSibling) !== null) { ... } 
0

यह एक अभिव्यक्ति है, और आप JSHint साथ काम करने के लिए इसे संशोधित कर सकते हैं (हालांकि यह अच्छा नहीं है):

अपने कोड के बाद से क्या आप आप एक स्पष्ट परीक्षण जोड़ सकता है इरादा है

while(element_iterator.nextSibling) { 
    element_iterator = element_iterator.nextSibling; 

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

0

jshint यह नहीं बता सकता कि क्या आप वास्तव में हालत ब्लॉक में असाइनमेंट करना चाहते हैं, या यदि वास्तव में तुलना की जानी चाहिए। चिंता यह होगी कि अन्य मनुष्यों के पास एक ही संदेह हो सकता है।

एक पुनरावर्तक के मामले में, मुझे लगता है कि आप ठीक हैं।

0

क्योंकि मैं एक घोषणा में एक अनुगामी अल्पविराम था समारोह से ठीक पहले मैं इस त्रुटि थी:

this.foo = "bar", // <- Error was here 

this.myfunc = function() { 
    ... // <- Error reported on this line 
}; 

(यह मुश्किल था, लेकिन मेरी राय है कि linters आमतौर पर ठीक कह रहे हैं पुष्ट, यह मेरी कोड है कि है गलत मैं चेतावनी अक्षम कर दिया था विश्व स्तर पर है -। या यहां तक ​​कि उस जगह में - बग अभी भी मौजूद होता है </lecture>)

+0

चुप हो गई है, यह इस प्रश्न में एक ही चेतावनी नहीं है। यह [W030] है (https://github.com/jshint/jshint/blob/78b79c099fc490d93cd7aef599a1528761e9498d/src/messages.js#L112) और प्रश्न [W084] के बारे में बात करता है (https://github.com/jshint/jshint /blob/78b79c099fc490d93cd7aef599a1528761e9498d/src/messages.js#L171)। इसी तरह, यह यहां अप्रासंगिक है। –

3

वहाँ रिपोर्ट की गई त्रुटि को हल करने के लिए कम से कम दो तरीके हैं, JSHint docs के अनुसार।।

  1. /*jshint boss:true */ सशर्त बयान से पहले
  2. लपेटें बयान अतिरिक्त कोष्ठक में while ((element_iterator = element_iterator.nextSibling)) {...}

व्यक्तिगत रूप से जोड़ें, यानी, मुझे लगता है कि अतिरिक्त कोष्ठक के साथ आसपास के सबसे अच्छा अभ्यास है, क्योंकि यह त्रुटि की जांच रहता है, लेकिन अभी भी अच्छा समझ में आता है कोड के लिहाज से। वास्तव में कुछ भी नहीं करने से पहले !! जोड़ना, लेकिन अभिव्यक्ति को सही/गलत और आगे दो अतिरिक्त समय में परिवर्तित करना है।

+0

हालांकि, यह ध्यान देने योग्य है कि "परिवर्तनीय छाया" के बारे में चेतावनी, खासकर लूप के मामले में। संदर्भ: http://jshint.com/docs/options/#shadow – PageYe

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