JSLint संदेश: अप्रयुक्त चर


80

अगर JSLint इस तरह के परिदृश्य में "अप्रयुक्त" होने के बारे में शिकायत करता है तो मैं क्या कर सकता हूं:

var items = "<option selected></option>";
$.each(data, function (i, item) {
    items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
});

(i, आइटम) मापदंडों का आवश्यक क्रम है और मैं केवल "आइटम" का उपयोग कर रहा हूं।

अप्रयुक्त चर को सहन करने या इंडेक्स का उपयोग करने के लिए $ .each का पुनर्लेखन करने के अलावा कोई और उपाय है, दोनों समाधान जो मैं नहीं करना चाहूंगा?

अग्रिम में धन्यवाद।

अद्यतन: मैं सभी सुझावों की सराहना करता हूं, लेकिन यह कोड केवल एक उदाहरण है जो आपको दिखाता है कि मेरा क्या मतलब है और यदि कोई है, तो मैं एक सामान्य समाधान देखने के लिए इच्छुक हूं। धन्यवाद।


6
इस विशेष मामले में this= item( api.jquery.com/jQuery.each ), इसलिए आपको या तो पैरामीटर का उपयोग नहीं करना पड़ेगा। लेकिन इस सवाल का जवाब शायद अधिक सामान्य अर्थ में दिया जाना चाहिए।
ग्रेग

यह बहुत अच्छा होगा अगर हम सिर्फ कर सकते हैं$.each(data, function (, item)
ऑस्करेलैंडर

बहुत से लोग _अप्रयुक्त पैरामीटर के लिए उपयोग करते हैं , लेकिन मुझे JSLint को विशेष रूप से अनदेखा करने के लिए कहने का कोई तरीका नहीं दिखता है_ , हालांकि यह वास्तव में अच्छा होगा।
डेविड जे।

जवाबों:


79

प्रयत्न:

var items = "<option selected></option>";
/*jslint unparam: true*/
$.each(data, function (i, item) {
    items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
});
/*jslint unparam: false*/  // so that you still get warnings from other functions

+1। यह एक समान स्थिति में मेरे लिए बहुत अच्छा काम करता है, और मैं इसे प्रभावित लाइन से ठीक पहले और बाद में डाल सकता था। धन्यवाद!
एड बेयेट्स

4
जब से आप i का उपयोग नहीं कर रहे हैं और आप jQuery के पुनरावृत्त का उपयोग करके वस्तुओं की एक सरणी के माध्यम से पुनरावृत्ति कर रहे हैं, आप "इस" का उपयोग कर सकते हैं:$.each([{a:0},{a:1},{a:2},{a:3}], function(){ console.log(this.a)})

3
यह इसे करने का सबसे अच्छा तरीका है! / * jslint अनटम: सच * /
फॉक्सिननी

1
फ़ंक्शन हटाएं :)

2
unparamअब JSLint द्वारा समर्थित नहीं है। इसके बजाय, यह ignoreनीचे दिए गए उत्तर में वर्णित नया कीवर्ड प्रदान करता है ।
oyenamit

24

मुझे लगता है कि यह नया होना चाहिए: http://www.jslint.com/help.html

"JSLint एक नया आरक्षित शब्द प्रस्तुत करता है: अनदेखा करें"

तो ऊपर बस बन जाता है:

$.each(data, function (ignore, item) {

i => उपेक्षा ... बहुत आसान। बाकी कोड समान रह सकते हैं, ब्राउज़र खुश हैं और JSLint खुश है


पहले (गलत) उत्तर:

JsLint और ब्राउज़रों दोनों का उपयोग करने के लिए मुझे उपयोग करने की आवश्यकता है:

function (d, i) {
        if (undefined !== win.undefined) {
            undefined(d);
        }
        return (i);
}

एक फ़ंक्शन न होने के कारण ब्राउज़र "अपरिभाषित (d)" पर क्रैश हो गया। यदि हम एक ब्राउज़र में हैं तो "अपरिभाषित! == win.undefined" लाइन को छोड़ देता है।


14
ignoreयदि एक ही फ़ंक्शन में एक से अधिक अप्रयुक्त पैरामीटर हैं, तो चेतावनी को दबाने का यह नया तरीका टूट जाता है।
ओयनामित

आप का उपयोग कर सकते हैं (पैरामीटर, अनदेखा, नजरअंदाज करें, नजरअंदाज करें 2, मान, नजरअंदाज), कम से कम वेबस्टॉर्म पर मैक के लिए विज्ञापन दबाने की चेतावनी काम कर रही है
पॉल एन

1

आप ऐसा कर सकते हैं:

var items = "<option selected></option>";
$.each(data, function () {
    var item = arguments[1];
    items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
});

... लेकिन अगर आप मुझसे पूछें तो यह शायद और भी बुरा है।


1
@Schroedinger - ओह हाँ, निश्चित रूप से। यह हमेशा JSLint के साथ एक व्यापार बंद है। आपको बस अपने लिए फैसला करना है।
13

8
एक चेतावनी को ठीक करता है, एक और कारण "जेएस लिंट: एक नामित पैरामीटर का उपयोग करें" :)

1

एक तरह से चेतावनी से छुटकारा पाने का एक संभव तरीका जो कि काफी स्व-दस्तावेजीकरण है, अप्रयुक्त चर का उपयोग करने का कारण बनता है, जैसे:

// Utility function in project scope:
function unusedVariables(/* Put all your deliberately unused variables here */) {
    // pass
}

// And then, later:
var items = "<option selected></option>";
$.each(data, function (i, item) {
    unusedVariables(i); //< This is the new and magical line
    items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
});

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

इस पद्धति का यह लाभ है कि यह सटीक है। का उपयोग करना /*jslint unparam*/बहुत व्यापक हो सकता है।


4
यह JSLint के "खाली ब्लॉक" परीक्षण में विफल हो सकता है।
jokeyrhyme

4
यह जवाब 'काम' करता है, हालांकि मैं इसका इस्तेमाल करने के खिलाफ सिफारिश करूंगा। मैं इसे "समस्या से समाधान बदतर है" के तहत दायर करता हूं।
डेविड जे।

1
अगर आप लोग इस समाधान, @superluminary और DavidJames के बारे में क्या बुरा है, के बारे में कुछ विवरण जोड़ते हैं तो यह अन्य पाठकों के लिए अधिक उपयोगी होगा। मुझे इस समाधान को नापसंद करने वाले लोगों के साथ कोई समस्या नहीं है, लेकिन एक टिप्पणी यह ​​कहते हुए जोड़ देना कि कोई मदद नहीं कर रहा है। :)
मैग्नस हॉफ

6
माफी मैग्नस, टिप्पणी हटा दी गई। इस समाधान को नापसंद करने का कारण यह है कि आप गैर-शब्दार्थ कोड को केवल अपने कोड को पारित करने में एक विशिष्ट सत्यापनकर्ता के विशिष्ट संस्करण को बेवकूफ बनाने के उद्देश्य से जोड़ रहे हैं। यह एक हैक है, यह कोड के लिए अर्थ नहीं जोड़ता है, और यह अच्छी तरह से उम्र नहीं होगा। JSLint को संशोधित करने के लिए उचित समाधान है।
सुपरम्लिनरी

@superluminary विस्तृत करने के लिए धन्यवाद :)
मैग्नस हॉफ

1

voidयह स्पष्ट करने के लिए कि आप जानबूझकर चर का उपयोग नहीं कर रहे हैं का उपयोग कैसे करें ?

$.each(data, function (i, item, any, other, unused, vars) {
  void(i, any, other, unused, vars);
  items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
});

यह उन सारगर्भित कार्यों में भी उपयोगी है, जिन्हें अधिलेखित करने की अपेक्षा की जाती है, लेकिन जहाँ आप हस्ताक्षर दिखाना चाहते हैं, या मॉक में, जहाँ आप तर्कों को अनदेखा कर रहे हैं, लेकिन नकली फ़ंक्शन के हस्ताक्षर से मेल खाना चाहते हैं।


3
शून्य का उपयोग करने से JSLint पास नहीं लगता है
xorcus

voidकारणों का उपयोग करना Expected 'undefined' and instead saw 'void'undefined(i, any, other, unused, vars);हालांकि पास JSLint का उपयोग करना ।
महेशसेनी

1

मैं "मैं" का नाम "अप्रयुक्त" के रूप में रखता हूं। यह अभी भी स्पष्ट रूप से त्रुटि छोड़ देता है, लेकिन मैं इसे सूची में देखता हूं और जानता हूं कि मैंने उस त्रुटि की "जांच" कर ली है और इसके साथ ठीक हूं।


यह एक बुरा विचार नहीं है, लेकिन यदि आप निरंतर एकीकरण करते हैं और कोड को मर्ज करने की अनुमति देने से पहले सभी कोड को लोन देना चाहते हैं तो यह काम नहीं करता है यदि आप चेतावनी को त्रुटियों के रूप में मान रहे हैं।

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


0

यदि फ़ंक्शन में एक से अधिक अप्रयुक्त पैरामीटर हैं, तो आप इस तरह से "उपेक्षा" का उपयोग कर सकते हैं :

function (ignoreFoo, ignoreBar, baz) {
}

इसे केवल आरक्षित शब्द "अनदेखा" (अनदेखा, अनदेखा करना, इग्नोर करना, ...) से शुरू करना चाहिए।


यह काफी हद तक PuZZleDucK के उत्तर के समान है । यदि आप पहले से ही कुछ उत्तर दे रहे हैं, और विशेष रूप से यदि वे बहुत पुराने हैं और पहले से ही अपग्रेड किए गए हैं, तो कृपया सुनिश्चित करें कि आप केवल एक और उत्तर नहीं दोहरा रहे हैं, या, यदि कोई अंतर है, तो कृपया स्पष्ट रूप से दूसरे को उद्धृत करें और इंगित करें स्पष्ट रूप से अंतर। धन्यवाद!
फैबियो का कहना है कि

2
निम्नलिखित कोड (3 अप्रयुक्त चर) के साथ केवल पहला "अनदेखा" JSLint सत्यापन पास करता है, अंतिम दो पैरामीटर "अप्रयुक्त 'अनदेखा' और" अप्रयुक्त 'ignTwo' ट्रिगरvideos.forEach(function (ignore, i, ignoreOne, ignoreTwo)
Emilien

'अनदेखा करना' घोषित है, लेकिन इसका मूल्य कभी नहीं पढ़ा गया। अब मुझे एक लंबी त्रुटि मिलती है :(
noob7
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.