Jslint nagle zgłasza: Użyj funkcji " use strict"

Dołączam stwierdzenie:

"use strict";

Na początku większości moich plików Javascript.

JSLint nigdy wcześniej o tym nie ostrzegał. Ale teraz jest, mówiąc:

Użyj formy funkcji "use strict".

Czy ktoś wie, jaka byłaby "forma funkcji"?

Author: Vikrant, 2010-12-16

8 answers

Include 'use strict'; jako pierwsze polecenie w funkcji owijania, więc wpływa tylko na tę funkcję. Zapobiega to problemom podczas łączenia skryptów, które nie są ścisłe.

Zobacz najnowszy post Douglasa Crockforda na blogu Strict Mode nadchodzi do miasta.

Przykład z tego postu:

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

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

Aktualizacja: Jeśli nie chcesz zawinąć natychmiastowej funkcji (np. jest to moduł węzła), możesz wyłączyć ostrzeżenie.

Dla JSLint (za Zhami):

/*jslint node: true */

Dla JSHint :

/*jshint strict:false */

Or (per Laith Shadeed)

/* jshint -W097 */

Aby wyłączyć dowolne ostrzeżenie z JSHint, sprawdź mapę w kod źródłowy JSHint (szczegóły w docs).

Aktualizacja 2: jshint obsługuje opcję node:boolean. Zobacz też .jshintrc na github .

/* jshint node: true */
 946
Author: bdukes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:37

Jeśli piszesz moduły dla NodeJS, są one już zamknięte. Powiedz JSLint, że masz węzeł, dołączając go na górze pliku:

/*jslint node: true */
 214
Author: Zhami,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-07 12:38:26

Proponuję zamiast tego użyć jshint.

Pozwala na stłumienie tego ostrzeżenia poprzez /*jshint globalstrict: true*/.

Jeśli piszesz bibliotekę, sugerowałbym użycie global strict tylko wtedy, gdy twój kod jest zamknięty w modułach, jak to ma miejsce w przypadku nodejs.

W przeciwnym razie zmusisz wszystkich, którzy używają Twojej biblioteki do trybu ścisłego.

 69
Author: Thorsten Lorenz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-12 14:58:37

Nie ma nic z natury złego w formie łańcuchowej.

Zamiast unikać" globalnej " ścisłej formy dla obawy konkatenacji non-strict javascript, to prawdopodobnie lepiej po prostu naprawić przeklęty non-strict javascript być ścisłe.

 15
Author: glycoslave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-25 05:48:10

Zacząłem tworzyć węzeł.aplikacja js / browserify po wpisie na blogu Cross Platform JavaScript . I natknąłem się na ten problem, ponieważ mój nowy Gruntfile nie przeszedł jshint.

Na szczęście znalazłem odpowiedź w leanpub book na Grunt :

Jeśli spróbujemy teraz, zeskanujemy nasz Gruntfile... i uzyskamy kilka błędów:

$ 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.

Oba błędy są spowodowane tym, że Gruntfile jest programem węzłowym i domyślnie JSHint nie rozpoznaje ani nie zezwala na użycie module i wersji string use strict. Możemy ustawić regułę JSHint, która będzie akceptować nasze programy węzłowe. Edytujmy konfigurację zadań jshint i dodajmy klucz options:

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

Dodanie node: true do jshint options, aby umieścić jshint w "trybie węzła", usunęło dla mnie oba błędy.

 15
Author: qris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-30 08:41:23

Dodaj plik .jslintrc (or .jshintrc w przypadku jshint) w katalogu głównym projektu o następującej treści:

{
    "node": true
}
 13
Author: Sahil Ahuja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-29 08:15:38

Myślę, że każdy przegapił "nagle" część tego pytania. Najprawdopodobniej twój .jshintrc ma błąd składni, więc nie zawiera linii 'browser'. Uruchom go za pomocą walidatora json, aby zobaczyć, gdzie jest błąd.

 0
Author: Dirigible,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-13 16:58:04

Jest to takie proste: jeśli chcesz być surowy dla całego kodu, dodaj "use strict"; na początku JavaScript.

Ale jeśli chcesz być ścisły tylko z częścią kodu, użyj formularza funkcji. W każdym razie, polecam Ci używać go na początku Twojego JavaScript, ponieważ pomoże Ci to być lepszym koderem.

 -5
Author: Jason Stackhouse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-01 11:01:35