JSLint अचानक रिपोर्टिंग कर रहा है: "सख्त उपयोग करें" के फ़ंक्शन रूप का उपयोग करें


930

मैं बयान शामिल करता हूं:

"use strict";

मेरी अधिकांश जावास्क्रिप्ट फ़ाइलों की शुरुआत में।

JSLint ने इस बारे में पहले कभी चेतावनी नहीं दी है। लेकिन अब यह कह रहा है:

"उपयोग सख्त" के फ़ंक्शन रूप का उपयोग करें।

क्या किसी को पता है कि "फ़ंक्शन फॉर्म" क्या होगा?

जवाबों:


1010

'use strict';रैपिंग फ़ंक्शन में पहले कथन के रूप में शामिल करें , इसलिए यह केवल उस फ़ंक्शन को प्रभावित करता है। यह उन समस्याओं को रोकता है जब स्क्रिप्ट को सख्त नहीं किया जाता है।

देखें डगलस क्रॉकफोर्ड का नवीनतम ब्लॉग पोस्ट स्ट्रिक्ट मोड इज़ कमिंग टू टाउन

उस पोस्ट से उदाहरण:

(function () {
   'use strict';
   // this function is strict...
}());

(function () {
   // but this function is sloppy...
}());

अद्यतन: यदि आप तत्काल कार्य में लिपटना नहीं चाहते हैं (उदाहरण के लिए यह एक नोड मॉड्यूल है), तो आप चेतावनी को अक्षम कर सकते हैं।

के लिए JSLint (प्रति Zhami ):

/*jslint node: true */

के लिए JSHint :

/*jshint strict:false */

या (प्रति लाथ शदीद )

/* jshint -W097 */

JSHint से किसी भी मनमानी चेतावनी को अक्षम करने के लिए, JSHint स्रोत कोड ( डॉक्स में विवरण ) में नक्शे की जाँच करें ।

अद्यतन 2: JSHintnode:boolean विकल्प का समर्थन करता है। .jshintrcजीथूब को देखें ।

/* jshint node: true */

1
विजुअल स्टूडियो के लिए JSLint में यह विकल्प है: "वैश्विक
ES5 को

10
यह नोड अनुप्रयोगों के लिए कोई मतलब नहीं है, यद्यपि। -1
bevacqua

1
हाय निको, मैंने जवाब अपडेट किया, नोड के लिए आप टाइप कर सकते हैं: / * jshint -W097 * / इस चेतावनी को अक्षम करने के लिए
Laith Shadeed

@LaithShadeed एक विकल्प होगा /*jshint strict:false */, यह स्पष्ट करने के लिए कि आप क्या कर रहे हैं (जब तक कि आपके संख्यात्मक कोड का कोई विशेष लाभ नहीं है कि मैं इसके बारे में नहीं जानता हूं)
bdukes

2
@ नोमैनन यह वास्तव में बॉयलरप्लेट नहीं है, यह एक निर्देश है जो आपके कोड में चल रहे वातावरण को बदलता है। उन्होंने कहा, नए ES6 सिंटैक्स (मॉड्यूल और कक्षाएं) डिफ़ॉल्ट रूप से सख्त हैं (देखें ecma-international.org/ecma562/6.0/ # सेकंड-सख्त-मोड-कोड ), इसलिए आगे बढ़ने से यह हर जगह फिसलने की जरूरत नहीं होगी। इस बीच, आप अपने सभी कोड को IIFE में लपेट सकते हैं, केवल "use strict";प्रति फ़ाइल एक बार निर्दिष्ट करना होगा ।
bdukes

217

यदि आप NodeJS के लिए मॉड्यूल लिख रहे हैं, तो वे पहले से ही एनकैप्सुलेटेड हैं। JSLint को बताएं कि आपको अपनी फ़ाइल के शीर्ष पर शामिल करके नोड मिला है:

/*jslint node: true */

2
FYI करें, यह विकल्प JSLint के लिए काम करता है, लेकिन JSHint इस निर्देश के साथ सख्ती की चेतावनी को बंद नहीं करता है। JSHint के लिए, प्रयास करें/*jshint strict:false */
bdukes

4
JSHint v2.9.2 के साथ मेरे लिए शब्द। जोड़ा "node": trueगया .jshintrc
रयानएम

71

मैं इसके बजाय jshint का उपयोग करने का सुझाव दूंगा

यह इस चेतावनी को दबाने की अनुमति देता है /*jshint globalstrict: true*/

यदि आप एक पुस्तकालय लिख रहे हैं, तो मैं केवल वैश्विक सख्त का उपयोग करने का सुझाव दूंगा यदि आपका कोड मॉड्यूल में एनकैप्सुलेटेड है जैसा कि नोड्ज के साथ है।

अन्यथा आप उन सभी को बाध्य करेंगे जो आपके पुस्तकालय का उपयोग सख्त मोड में कर रहे हैं।



4
FYI करें: JSHint में वैश्विक विकल्प बदल गया है। strict: 'global'अभी आज़माएँ , और jshint.com/docs/options/#globalstrict
होविस बिडल

17

मैंने क्रॉस प्लेटफ़ॉर्म जावास्क्रिप्ट ब्लॉग पोस्ट के बाद एक Node.js / Browserify एप्लिकेशन बनाना शुरू किया । और मैं इस मुद्दे में भाग गया, क्योंकि मेरे ब्रांड न्यू ग्रंटफाइल ने जिश्ट पास नहीं किया।

सौभाग्य से मुझे ग्रंट पर लीनपब पुस्तक में एक उत्तर मिला :

यदि हम इसे अभी आज़माते हैं, तो हम अपनी ग्रन्टफ़ाइल को स्कैन करेंगे ... और कुछ त्रुटियां प्राप्त करेंगे:

$ grunt jshint

Running "jshint:all" (jshint) task
Linting Gruntfile.js...ERROR
[L1:C1] W097: Use the function form of "use strict".
'use strict';
Linting Gruntfile.js...ERROR
[L3:C1] W117: 'module' is not defined.
module.exports = function (grunt) {

Warning: Task "jshint:all" failed. Use --force to continue.

दोनों त्रुटियां हैं क्योंकि ग्रंटफाइल एक नोड प्रोग्राम है, और डिफ़ॉल्ट रूप से JSHint के moduleऔर स्ट्रिंग संस्करण के उपयोग को मान्यता या अनुमति नहीं देता है use strict। हम एक JSHint नियम निर्धारित कर सकते हैं जो हमारे नोड कार्यक्रमों को स्वीकार करेगा। आइए हमारे jshint कार्य विन्यास को संपादित करें और एक विकल्प कुंजी जोड़ें:

jshint: {
  options: {
    node: true
  },
}

node: trueजेशिंत को जोड़ने के लिए options, "नोड मोड" में जेशिन को डालने के लिए, मेरे लिए दोनों त्रुटियों को हटा दिया।


16

निम्नलिखित सामग्री के साथ अपने प्रोजेक्ट के रूट पर एक फ़ाइल .jslintrc (या jshint के मामले में .jshintrc) जोड़ें:

{
    "node": true
}

15

स्ट्रिंग रूप के साथ कुछ भी गलत नहीं है।

गैर-सख्त जावास्क्रिप्ट को सुगम बनाने की चिंता के लिए "वैश्विक" सख्त रूप से बचने के बजाय, शायद सख्त होने के लिए सिर्फ गैर-सख्त जावास्क्रिप्ट को ठीक करना बेहतर है।


0

मुझे लगता है कि हर कोई इस प्रश्न के "अचानक" भाग से चूक गया। सबसे अधिक संभावना है, आपके .jshintrc में एक सिंटैक्स त्रुटि है, इसलिए यह 'ब्राउज़र' लाइन सहित नहीं है। यह देखने के लिए कि कोई त्रुटि है, इसे एक जैसन सत्यापनकर्ता के माध्यम से चलाएँ।


1
नहीं, यह अचानक हुआ क्योंकि ऑनलाइन JSLint सेवा ने 2010 में उस सुविधा को जोड़ा जब सवाल पूछा गया था।
क्वेंटिन

0
process.on('warning', function(e) {
    'use strict';
    console.warn(e.stack);
});
process.on('uncaughtException', function(e) {
    'use strict';
    console.warn(e.stack);
});

इस लाइन को अपनी फ़ाइल के शुरुआती बिंदु पर जोड़ें


-4

यह कितना सरल है: यदि आप अपने सभी कोड के साथ सख्त होना चाहते हैं "use strict";, तो अपने जावास्क्रिप्ट की शुरुआत में जोड़ें ।

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


8
मुझे वास्तव में यह त्रुटि तब होती है जब मैं केवल "use strict";अपनी जेएस फाइल के शीर्ष पर रखता हूं, इसलिए यह पूरी तरह से सच नहीं हो सकता है।
मौसमी

@moesef ऐसा इसलिए है क्योंकि आपके कोड में त्रुटियां हैं। यह सिर्फ आपके कोडिंग कौशल को बेहतर बनाने में मदद करने के लिए है और आपके कोड को कम "ढीला" बनाने में मदद करता है ... यह अघोषित चर आदि को स्वीकार नहीं करेगा ...
जेसन स्टैकहाउस

11
@ जैसनस्टैकहाउस: सच नहीं है। JSLint "वैश्विक" रूप स्वीकार नहीं करेगा "use strict";, जहां यह आपके कोड के शीर्ष पर रखा गया है। यह केवल "use strict;"एक फ़ंक्शन में लिपटे जाने की अनुमति देता है। (JS_Hint_ आपको वैश्विक रूप का उपयोग करने की अनुमति देता है, हालांकि - आवश्यक सेटिंग के लिए ऊपर उत्तर देखें)।
peterflynn
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.