JSLint හදිසියේම වාර්තා කරයි: “දැඩි ලෙස භාවිතා කරන්න” යන ක්‍රියාකාරී ආකෘතිය භාවිතා කරන්න


935

මම ප්රකාශය ඇතුළත් කරමි:

"use strict";

මගේ බොහෝ ජාවාස්ක්‍රිප්ට් ගොනු ආරම්භයේදී.

ජේඑස්ලින්ට් මීට පෙර කවදාවත් මේ ගැන අනතුරු අඟවා නැත. නමුත් දැන් එය කියන්නේ:

"දැඩි ලෙස භාවිතා කරන්න" යන ක්‍රියාකාරී ආකෘතිය භාවිතා කරන්න.

"ක්‍රියාකාරී ආකෘතිය" යනු කුමක්දැයි යමෙක් දන්නවාද?

Answers:


1016

'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 දැඩි ලෙස ඉඩ දෙන්න"
Jowen

10
මෙය නෝඩ් යෙදුම් සඳහා තේරුමක් නැත. -1
bevacqua

1
හායි නිකෝ, මම පිළිතුර යාවත්කාලීන කළෙමි, නෝඩ් සඳහා ඔබට ටයිප් කළ හැකිය: / * jshint -W097 * / මෙම අනතුරු ඇඟවීම අක්‍රිය කිරීමට
ලයිත් ෂැඩීඩ්

A ලයිත්ෂේඩ් විකල්පයක් වනුයේ /*jshint strict:false */, ඔබ කරන්නේ කුමක්ද යන්න පැහැදිලි කිරීම (මම නොදන්නා ඔබේ සංඛ්‍යා කේතයට විශේෂ ප්‍රතිලාභයක් නොමැති නම්)
bdukes

2
ඇත්තෙන්ම එය ගිනි උදුනක් නෑ @Noumenon, එය, නව ES6 කාරක රීති (මොඩියුලයන් සහ පංති) ඔබගේ කේතය ධාවනය වන පරිසරය වෙනස් බව උපදෙස් ය. පවසයි ඒක පෙරනිමියෙන් තදය (බලන්න ecma-international.org/ecma-262/6.0/ # තත්පර-දැඩි-මාදිලියේ කේතය ), එබැවින් ඉදිරියට යාමට මෙය සෑම තැනම පැටලීමට අවශ්‍ය නොවේ. මේ අතර, ඔබට ඔබගේ සියලුම කේත IIFE එකකින් ඔතා තැබිය හැක්කේ "use strict";එක් ගොනුවකට එක් වරක් පමණක් නියම කිරීමටය .
bdukes

216

ඔබ 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
හොවිස් බිඩ්ල්

18

හරස් වේදිකා ජාවාස්ක්‍රිප්ට් බ්ලොග් සටහනෙන් පසුව මම 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.

දෝෂ දෙකම සිදුවන්නේ ග්‍රන්ට්ෆයිල් යනු නෝඩ් වැඩසටහනක් වන අතර පෙරනිමියෙන් ජේඑස්හින්ට් විසින් භාවිතා කිරීමට moduleසහ නූල් අනුවාදය හඳුනා ගැනීමට හෝ ඉඩ නොදේ use strict. අපගේ Node වැඩසටහන් පිළිගන්නා JSHint රීතියක් අපට සැකසිය හැකිය. අපි අපගේ jshint කාර්ය වින්‍යාසය සංස්කරණය කර විකල්ප යතුරක් එක් කරමු:

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

Jshint "නෝඩ් මාදිලියට" ඇතුළත් කිරීම node: trueසඳහා jshint වෙත එකතු කිරීම options, මා සඳහා වූ දෝෂ දෙකම ඉවත් කළේය.


16

පහත සඳහන් අන්තර්ගතය සමඟ ඔබේ ව්‍යාපෘතියේ මුල .jslintrc (හෝ .jshintrc) ගොනුවක් එක් කරන්න:

{
    "node": true
}

15

නූල් පෝරමයේ සහජයෙන්ම වැරැද්දක් නැත.

දැඩි නොවන ජාවාස්ක්‍රිප්ට් සංයුක්ත කිරීම ගැන කරදර වීම සඳහා "ගෝලීය" දැඩි ස්වරූපයෙන් වැළකී සිටිනවා වෙනුවට, දැඩි නොවන දැඩි ජාවාස්ක්‍රිප්ට් දැඩි ලෙස නිවැරදි කිරීම වඩා හොඳය.


0

මම හිතන්නේ හැමෝටම මෙම ප්‍රශ්නයේ "හදිසියේ" කොටස මග හැරුණි. බොහෝ දුරට, ඔබේ .jshintrc හි සින්ටැක්ස් දෝෂයක් ඇති බැවින් එය 'බ්‍රව්සර්' රේඛාව ඇතුළත් නොවේ. දෝෂය ඇති තැන බැලීමට එය json වලංගු කරන්නෙකු හරහා ධාවනය කරන්න.


1
නැත, එය හදිසියේම සිදු වූයේ 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";මගේ JS ගොනුවේ ඉහළින්ම තැබූ විට මට මෙම දෝෂය ඇතිවේ, එබැවින් මෙය සම්පූර්ණයෙන්ම සත්‍ය නොවනු ඇත.
moesef

osemoesef එයට හේතුව ඔබේ කේතයේ දෝෂ ඇති බැවිනි. ඔබේ කේතීකරණ කුසලතා වඩා හොඳ කිරීමට සහ ඔබේ කේතය අඩු “ලිහිල්” කිරීමට එය උපකාරී වේ ... එය ප්‍රකාශයට පත් නොකළ විචල්‍යයන් පිළිගන්නේ නැත ...
ජේසන් ස්ටැක්හවුස්

11
Ason ජේසන් ස්ටැක්හවුස්: සත්‍ය නොවේ. JSLint "use strict";ඔබේ කේතයේ ඉහළින්ම තබා ඇති "ගෝලීය" ආකෘතිය පිළිගන්නේ නැත . එය ඉඩ "use strict;"දෙන්නේ ශ්‍රිතයක ඔතා ඇති විට පමණි . (JS_Hint_ ඔබට ගෝලීය ආකෘතිය භාවිතා කිරීමට ඉඩ දෙයි, නමුත් - අවශ්‍ය සැකසුම සඳහා ඉහත පිළිතුර බලන්න).
පීටර්ෆ්ලින්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.