tl; dr takeaway :
Якщо ви шукаєте дуже високий стандарт для себе чи команди, JSLint. Але це не обов'язково стандарт, а лише стандарт, який приходить до нас догматично від бога javascript на ім'я Дуг Крокфорд. Якщо ви хочете бути трохи гнучкішими, або у вас є старі плюси у вашій команді, які не заважають думкам JSLint, або регулярно переходять між JS та іншими мовами сімейства C, спробуйте JSHint.
довга версія :
Міркування за виделкою досить добре пояснює, чому JSHint існує:
http://badassjs.com/post/3364925033/jshint-an-community-driven-fork-of-jslint http://anton.kovalyov.net/2011/02/20/why-i-forked-jslint-to -jshint /
Тому я гадаю, що ідея полягає в тому, що це "керована громадою", а не керована Крокфордом. На практиці JSHint, як правило, трохи поблажливіший (або принаймні налаштований чи агностик) щодо кількох стилістичних та другорядних синтаксичних «думок», на які JSLint є стикером.
Наприклад, якщо ви вважаєте, що і A, і B нижче, або якщо ви хочете написати код з одним або декількома аспектами A, які відсутні в B, JSHint призначений для вас. Якщо ви думаєте, що B - єдиний правильний варіант ... JSLint. Я впевнений, що є й інші відмінності, але це виділяє декілька.
A) Випускає JSHint з коробки - виходить з ладу JSLint
(function() {
"use strict";
var x=0, y=2;
function add(val1, val2){
return val1 + val2;
}
var z;
for (var i=0; i<2; i++){
z = add(y, x+i);
}
})();
B) Проходить як JSHint, так і JSLint
(function () {
"use strict";
var x = 0, y = 2, i, z;
function add(val1, val2) {
return val1 + val2;
}
for (i = 0; i < 2; i += 1) {
z = add(y, x + i);
}
}());
Особисто мені здається, що код JSLint дуже приємний для перегляду, і єдині важкі особливості його, з якими я не погоджуюся, - це ненависть до декількох оголошень var у функції та var i = 0
декларацій for-loop , а також деякі застосунки білого простору для декларацій функції. .
Декілька речей білого простору, які застосовує JSLint, я вважаю не обов’язково поганим, але не синхронізований з деякими досить стандартними умовами пробілів для інших мов у сім'ї (C, Java, Python тощо), які часто є слідують конвенціям і в Javascript. Оскільки я пишу на різних цих мовах протягом дня і працюю з членами команди, які не люблять пробіл у стилі Lint у нашому коді, я вважаю, що JSHint є гарним балансом. Він ловить речі, які є законною помилкою або дуже поганою формою, але не гавкає на мене, як це робить JSLint (іноді таким чином, я не можу відключити) за стилістичні думки або синтаксичні нитки, які мені не цікаві.
Дуже багато хороших бібліотек не є Lint'able, що, на мій погляд, демонструє, що є деяка правда в думці про те, що деякі JSLint просто просто просувають 1 версію "хорошого коду" (що, справді, хороший код). Але знову ж таки, ті самі бібліотеки (або інші хороші), ймовірно, теж не підкажуть, тож, touché.
Combine this with the previous 'var' statement
->Do not mix 'require' and other declarations
, парадокс.