Что хороший является JSLint, если jQuery приводит к сбою [закрытую] проверку

У вас может быть функция, подобная приведенной ниже, путем циклирования символов и использования метода строки charCodeAt, как показано ниже.

Примечание. Это относится к вопросу, поднятому в нижней ссылке.

проверка строки для 3 или более последовательных алфавитно-цифровых символов в javascript

function validate() {
  var pwd = document.getElementById('password').value;
  var isValid = checkPassword(pwd);
  var elm = document.getElementById('result');
  elm.innerHTML = isValid ? 'Valid' : 'Invalid';
  elm.style.color = isValid ? 'green' : 'red';
}

function checkPassword(s) {
    
    if(s) {
       var test = (x) => !isNaN(x);
       var check = (x, y, i) => x + i === y;
    
       for(var i = 0; i < s.length - 2; i++) {
         if(test(s[i])) {
            if(test(s[i + 1]) && test(s[i + 2])) {
              if(check(s[i], s[i + 1], 1) &&
                check(s[i], s[i + 2], 2)) {
                return false;
              }
            }
         } else if(!test(s[i + 1]) && !test(s[i + 2])) {
            if(check(s.charCodeAt(i), s.charCodeAt(i + 1), 1) &&
                check(s.charCodeAt(i), s.charCodeAt(i + 2), 2)) {
                return false;
              }
         }
       }
      
    }
    
    return true;
}

document.getElementById('buttonToValidate').click();
 

39
задан Bobby Borszich 3 February 2009 в 08:33
поделиться

9 ответов

JSLint тестирует одного конкретного человека (Douglas Crockford) мнения относительно того, что делает хороший код JavaScript. Crockford очень хорош, но некоторые его мнения анальные сохраняющий в лучшем случае как правило подчеркивания или использование инкремента/операторов понижения.

Многими проблемами, отмечаемыми JSLint на вышеупомянутом выводе, являются проблемы, которые чувствует Crockford, приводит к трудному для поддержания кода, или они - вещи, которые он чувствует, привел его к выполнению 'умных' вещей в прошлом, которое может быть трудно поддержать.

существуют некоторые вещи, Crockford идентифицирует как ошибки, что я соглашаюсь с хотя, как недостающая вещь точек с запятой. Отбрасывание точек с запятой вынуждает браузер предположить, где вставить маркер конца оператора, и это может иногда быть опасно (это всегда медленнее). И несколько из тех ошибок связаны с JSLint, не ожидая, или поддерживание нескольких присвоений как jQuery делает на строке 24.

, Если у Вас есть вопрос об ошибке JSLint, электронная почта Crockford, он действительно хорош об ответе, и с его ответом, Вы будете, по крайней мере, знать, почему JSLint был реализован тот путь.

, О, и просто потому что библиотека популярна, не означает, что это - код, хорошо работает. JQuery популярен, потому что это - относительно быстрая, простая в использовании библиотека. То, что это хорошо реализовано, довольно несущественно к, он - популярность среди многих. Однако необходимо, конечно, читать больше кода, все мы должны.

JSLint может быть очень полезным в идентификации проблем с кодом, даже если JQuery не передает стандарты, которых это требует.

105
ответ дан foxxtrot 7 July 2019 в 01:37
поделиться

"jQuery очень популярен, таким образом, он должен иметь определенную степень хорошего кодирования".

можно было бы хотеть надеяться дело обстоит так с jQuery, но к сожалению это не действительно верно. jQuery полезен и популярен, но это не правильно написанная библиотека JavaScript. David Mark недавно отправил уничтожающий критический анализ jQuery в comp.lang.javascript, который исследует большое количество примеров плохого кода, найденного в jQuery:

http://groups.google.com/group/comp.lang.javascript/msg/37cb11852d7ca75c?hl=en&

7
ответ дан vsedach 7 July 2019 в 01:37
поделиться

JSLint помогает Вам поймать проблемы, это не тест законности или замены для размышления. jQuery довольно совершенствуется, когда js идет, который делает такой результат понятным. Я подразумеваю, что эти первые две строки являются взломами скорости, неудивительными, что самый твердый js синтаксический анализатор идет, имеют несколько ошибок.

В любом случае, предположение, что популярный код является совершенно правильным кодом или даже 'хороший', испорчено. Код jQuery хорош, и можно узнать о большом количестве из из чтения его. Необходимо все еще выполнить материал через JSLint, если только потому, что хорошо услышать другое мнение о том, что Вы записали.

Из описания JSLINT:

JSLint берет источник JavaScript и сканирует его. Если это находит проблему, это возвращает сообщение, описывающее проблему и приблизительное местоположение в источнике. Проблемой является не обязательно синтаксическая ошибка, хотя это часто. JSLint смотрит на некоторые конвенции стиля, а также структурные проблемы. Не оказывается, что Ваша программа корректна. Это просто обеспечивает другую пару глаз, чтобы помочь определить проблемы.

JSLint определяет профессиональное подмножество JavaScript, более строгого языка, чем определенный Выпуском 3 Спецификации языка ECMAScript. Подмножество связано с рекомендациями, найденными в Конвенциях Кода для Языка программирования JavaScript.

9
ответ дан jacobangel 7 July 2019 в 01:37
поделиться

Если Вы активно не разрабатываете сам jQuery, почему даже выполненный JSLint по нему вообще? Если это работает, это работает, и Вы не должны волноваться об этом.

4
ответ дан nickf 7 July 2019 в 01:37
поделиться

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

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

4
ответ дан Prestaul 7 July 2019 в 01:37
поделиться

Цель JsLint ясно формулируется в FAQ [1]:

"JSLint определяет профессиональное подмножество JavaScript, более строгого языка, чем определенный Выпуском 3 Спецификации языка ECMAScript. Подмножество связано с рекомендациями, найденными в Конвенциях Кода для Языка программирования JavaScript".

Теперь, если Вы смущены: ECMA3 уже является подмножеством возможностей JS, обеспеченных любым из сегодняшних интерпретаторов JS (см. [2] для обзора отношения между JavasScript и версиями ECMAScript)

Для ответа на quesition, "что хороший JSlint": * используйте JsLint, чтобы проверить использование "безопасного" подмножества JavaScript, который является unlikly для повреждения через реализации JS. * используйте Jslint, чтобы проверить, что Вы следовали конвенциям кода crockford [4]

3
ответ дан oberhamsi 7 July 2019 в 01:37
поделиться

Я обнаружил один случай, когда JSLint очень, очень полезен: когда вы берете одну из тех громоздких библиотек, которые плавают в сети, затем другую, затем еще одну, вы скоро обнаружите, что загружаете 50 КБ Javascript при каждой новой загрузке страницы (кеширование может помочь, но это не панацея от всех проблем).

Что бы вы сделали тогда? Сожмите эти библиотеки. Но ваш хост не выполняет сжатие для файлов, отличных от HTML! И что? Вы используете компрессор Javascript.

Лучшее, что я нашел, - это Dean Edward's; Я использовал его для сжатия Showdown Джона Фрейзера (библиотека Markdown для Javascript), но, к сожалению, сжатие сломало код. Поскольку Showdown больше не поддерживается, мне пришлось исправить это сам - и JSlint оказался для этого неоценимым.

Короче говоря,

1
ответ дан 27 November 2019 в 02:05
поделиться

Если вам нравится использовать гирляндное соединение методов, таких как jQuery, вам может понравиться YUI3.

-1
ответ дан 27 November 2019 в 02:05
поделиться

JQuery, конечно, не лучшая вещь в мире. Это уже ясно, когда вы смотрите на обозначения. Комбинация долларовых скобок действительно вредна для глаз. Программирование должно быть ясным и простым. JQuery далек от этого. Этой причины достаточно, чтобы я не использовал его. То, что она написана неправильно, меня не удивляет, а только подчеркивает мои мысли об этой библиотеке JavaScript.

-1
ответ дан 27 November 2019 в 02:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: