Возможный дубликат:
Что хорошего в JSLint, если jQuery не удалось проверить
http://code.jquery.com/jquery-1.4.4.js
Перейдите туда и вставьте его на www.jslint.com
Является ли Jquery не допустимым.
Возможный дубликат:
Что хорошего в JSLint, если jQuery не удалось проверить
http://code.jquery.com/jquery-1.4.4.js
Перейдите туда и вставьте его на www.jslint.com
Является ли Jquery не допустимым.
Слишком много работы, чтобы соответствовать ему и быть совместимым с кросс-браузером. JSLint полезен, но его единственный общий парсер. jQuery имеет веские основания для того, чтобы вносить в него ошибки.
Иногда вам просто нужны простые грязные хаки, чтобы заставить код работать в несовместимых браузерах.
посмотрим на них один за другим:
Проблема в строке 231 символ 20: Ожидаемый '===' и вместо этого увидел '=='.
return num == null?
Здесь jquery использует ==
on null
для проверки как undefined
, так и null
. Поскольку jQuery используется как внешняя библиотека, он не может гарантировать, будет ли вход, который мы передаем в функции, будет undefined
или null
. Это безопаснее для проверки и того, и другого.
Выполнение num === undefined || num === null
для удовлетворения JSLint смешно.
Проблема на строке 446 персонажа 29: Ожидалось условное выражение и вместо этого увидел назначение.
while ((fn = ready [i ++])) {
Здесь JSLint жалуется на назначение вместо проверки равенства. Причина, по которой JSLint выбрасывает эту ошибку, состоит в том, что ее общий тип type =
вместо ==
по ошибке. Назначение в этом цикле while сделано для того, чтобы сделать код более аккуратным.
Проблема в строке 550 символ 9: Пусто блок.
var key; for (ключ в obj) {}
return key === undefined || hasOwn.call(obj, key);
JSLint жалуется на пустой для блока. Это сделано специально, потому что мы не хотим ничего делать с key
, вместо этого мы хотим перечислить все ключи и заботиться только о последнем.
Проблема в строке 554 character 15: Move Объявления 'var' в верхней части функция.
для (имя var в obj) {
JSLint настаивает на объявлении переменных в верхней части функций. Это немного глупо и может быть проигнорировано, если вы хотите. Это вопрос стиля.
И затем синер сидит. Позвольте мне удалить часть кода, разбив его и посмотреть, могу ли я найти больше жалоб.
Проблема символа линии 792 42: '& &' подвыражение должно быть завернуто в parens.
ua.indexOf( "compatible" ) < 0 & & rmozilla.exec(ua) ||
Я лучше согласен с этим (ua.indexO("compatile") < 0) &&
.
Проблема в строке 872 символ 3: Переместить вызов в parens, который содержат функцию.
})();
Для замыканий типа:
(function() {
})();
//}());
JSLint предпочитает видеть функцию invokion в скобках как вопрос стиля. Я также согласен с этим, но это действительно не имеет значения.
Проблема символа линии 972 13: 'e' уже определено.
} catch (e) {
Parser жалуется на повторное использование переменной e
В этом случае мы знаем, что e
будет использоваться только локально в этом блоке catch, поэтому не имеет значения, изменим ли мы его за пределами блока catch. Здесь я предпочитаю читаемость повторного использования имени переменной e
Проблема в строке 1097 символ 21: Ожидаемый '===' и вместо этого увидел '=='.
elem = elem == window?
Хорошо, ты поймал меня на этом. Я обрушился на то, почему jQuery не использует ===
на window
Проблема в строке 1621 символ 24: Ожидаемое назначение или функция вызывать и вместо этого видеть выражение.
parent.selectedIndex;
// Safari mis-reports the default selected property of an option
// Accessing the parent selectedIndex property fixes it
if ( name === "selected" && !jQuery.support.optSelected ) {
var parent = elem.parentNode;
if ( parent ) {
parent.selectedIndex;
Вот одна из ошибок кросс-браузера, которые могут быть исправлены, но вызывает плохие code
Проблема символа линии 977 17: Отсутствует "break" после "case".
case "last":
JSLint говорит, что вы всегда должны ломаться после своих дел. Это совершенно верно, чтобы провалиться после случая. В большинстве случаев вы забыли break
, но здесь это намеренно.
Проблема в строке 1099 character 77: Ожидаемое назначение или функция вызывать и вместо этого видеть выражение.
Array.prototype.slice.call( document.documentElement.childNodes, 0 ) [0].node...
// Perform a simple check to determine if the browser is capable of
// converting a NodeList to an array using builtin methods.
// Also verifies that the returned array holds DOM nodes
// (which is not the case in the Blackberry browser)
try {
Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
Источник здесь говорит сам за себя. Это странный оператор, но если доступ к нему, как это, вызывает ошибку, то его можно поймать. Это все еще справедливо, только JSLint сообщает вам: "Вы действительно хотели это сделать?"
Проблема в строке 2377 символ 15: Плохо в переменной "name".
для (имя в параметрах) {
Здесь JSLint жалуется на использование name
, который может конфликтовать с window.name
в глобальной области. Это "не совсем зарезервированное ключевое слово будущего, но его следует избегать". Были в закрытом состоянии, так что это безопасно.
Проблема в строке 2486 символ 29: слишком много ошибок. (60% отсканировано).
Внутренний стек JSLint не может справиться с этим. Я сейчас остановлюсь.
Я думаю, что смысл проиллюстрирован.
JSLint имеет много "Вы уверены, что хотите это сделать" И говорили это да, мы хотим это сделать. Это может показаться ошибкой, но это не так.
Правила, используемые jslint, являются рекомендациями, а не нерушимыми правилами. Есть много причин, по которым вы можете игнорировать некоторые из них.
Существует довольно много подробных соображений правил jslint; многие люди не согласны с этим.
Лично мне это нравится, но используйте комментарии в верхней части каждого JS файла, чтобы включать и выключать различные предупреждения, когда я знаю, что то, что я делаю, является подходящим. Затем мы запускаем jslint против всех наших JS как часть тестов CI, и он иногда ловит несколько тривиальных ошибок, не обременяя нас вообще.