инструмент качества кода JSLint - PullRequest
2 голосов
/ 01 мая 2011

Итак, я проверил свой JavaScript, используя это: http://www.jslint.com/

, и если я не заключаю операторы IF / FOR между {}, я получаю «ошибки», такие как:

Проблема в строке 152, символ 27: Ожидается «{» и вместо этого он видит «reset ()».

или если я инициализирую переменные внутри FOR, я получаю:

Проблема в строке 154, символ 19. Переместите объявления 'var' в начало функции.

Почему эти ошибки считаются?Разве их не следует считать хорошей практикой, потому что они фактически уменьшают размер кода, что для javascript даже важнее, чем скорость кода?

Ответы [ 6 ]

10 голосов
/ 01 мая 2011

В случае ошибки оператора if отсутствие открывающей скобки считается плохой практикой, поскольку это усложняет обслуживание. Например, если вы хотите добавить еще один оператор в оператор if, вам, в конечном счете, придется добавлять фигурные скобки, так что это упрощает обслуживание, просто включив их в первую очередь.

Вторая ошибка, на мой взгляд, немного .. самоуверенная, поскольку лично я предпочитаю объявлять переменные ближе к месту их использования, а не вверху функции.

Лично я предпочитаю использовать JSHint в наши дни, так как я считаю, что Crockfords Lint меньше думает о правильном коде, а больше о мнении Crockfords о том, как должен выглядеть JavaScript, и мнение всех остальных. 1008 *

4 голосов
/ 01 мая 2011

JSLint рекомендует переносить операторы if и for в фигурные скобки, потому что это может привести к трудностям в отслеживании ошибок, если вы не будете осторожны со своими отступами.Например:

if (somecondition)
    step1();
    step2();

Начиная с отступа, похоже, что step1 () и step2 () будут выполняться, только если какое-то условие выполнено, но в действительности step2 () всегда будет выполняться, так как скобки отсутствуют.

Если вы действительно обеспокоены размером файла, я бы посоветовал взглянуть на JS-компрессор, например, на yuicompressor.Большинство из них удалит скобки, если / для операторов, которые не нуждаются в них.Тогда вы сможете получить лучшее из обоих миров: читаемый код и файл небольшого размера, когда он обслуживается.

3 голосов
/ 01 мая 2011

Относительно второго вопроса, JSlint рекомендует его, потому что переменные javascript всегда имеют область действия , а не область блока. Делаем это:

function func(){
  var i;
  alert('foo');
  for(i = 0; i<3; i++){
     alert(i);
  }
  alert(i);
}

точно (100% точно!) Так же, как:

function func(){
  alert('foo');
  for(var i = 0; i<3; i++){
     alert(i);
  }
  alert(i);
}

То есть i не ограничен (как в других языках). Вот почему jslint рекомендует ставить все переменные поверх функций, чтобы вы не запутались, думая, что есть переменные в области блока.

Уважение к первому вопросу, я с вами согласен. Я не вижу в этом большой проблемы. Но JSLint видит в этом проблему, потому что, если вы позже добавите строки в оператор if и забудете поставить фигурные скобки, у вас будет логическая ошибка, как указал Джефф.

До:

if (x > 10)
    alert("it's obvious x is positive");

После некоторых изменений в коде:

if (x > 10)
    alert("it's obvious x is positive");  
    alert("x is greater than 10");  //Logic error

Проблема, которая не возникла бы при использовании фигурных скобок.

1 голос
/ 01 мая 2011

JSLint - это инструмент качества , предназначенный для уменьшения количества ошибок. Вы знаете, что вы можете написать только одно утверждение в цикле if, без необходимости заключать его в фигурные скобки, но этот парень этого не делает. А что, если вы случайно сделаете это однажды?

Уменьшение размера файла во время разработки вряд ли необходимо, для этого нужны минифайеры. Во время разработки вы должны заставить код работать и иметь смысл.

Переменные в верхней части функций - раздражающая дискуссия о стилях кодирования, и вы можете отключить уведомления об этом в опциях.

В любом случае, просто игнорируйте ошибки, которые вас не волнуют.

0 голосов
/ 01 мая 2011

Вы спрашиваете: «Почему эти ошибки считаются?» Они гораздо больше, чем плохая практика; они явно злые. Это потому, что они поощряют последующие ошибки, которые почти невозможно найти Такое же упущение фигурных скобок в смертных желаниях допускается и в C, и в C ++, и это такая же большая ошибка в нем.

Если бы, как и я, вы попытались спасти пару нажатий клавиш, не используя скобки, а затем были укушены и избиты вашей ошибкой, я обещаю, что вы не зададите этот вопрос :-)

0 голосов
/ 01 мая 2011

Первое, фигурные скобки в if утверждениях, отражает убеждение автора JSLint о том, что пропуск фигурных скобок приводит к проблемам с обслуживанием (убеждение, которое я разделяю, но это ни здесь, ни там).

Вторая вещь фактически зависит от языка: размещение var в любом месте, кроме верха области (функции или глобальной), фактически вводит в заблуждение любого, кто читает код, потому что независимо от того, где вы его поместили, это точно так же, как если бы было в верхней части диапазона. Детали: Плохо, неправильно понято var

...