JSLint Отладчик Javascript: я должен отладить эти проблемы? - PullRequest
0 голосов
/ 12 февраля 2011

только что начал использовать JSLint для некоторого кода Я купил некоторое время назад.Это критизирует много строк кода ... Что вы думаете об этих строках?Должен ли я переписать их, и если да, то как их можно исправить?

Проблема в строке 5, символ 23: использовать буквенное обозначение массива []

var radios = new Array();

Проблема в строке 22: 'focustextareas 'использовался до того, как он был определен

function focustextareas(){

Проблема в строке 125: ожидание' === 'и вместо этого увидел' == '

else if(elem.className=="optionsDivVisible") {elem.className = "optionsDivI...

Проблема в строке 133: ожиданиеусловное выражение и вместо этого увидел присваивание

while(elem = document.getElementById("optionsDiv"+g))

Проблема в строке 136, символ 13: Ожидается '{', и вместо этого он видит 'return'

return g;

Ответы [ 4 ]

3 голосов
/ 12 февраля 2011

Вот мои мнения .

Использование буквенной нотации [] является хорошей практикой, поскольку при использовании конструктора можно избежать некоторых запутанных обстоятельств. Кроме того, это намного короче.

//var radios = new Array();
var radios = [];

=== использует менее сложный алгоритм и позволяет избежать путаницы, которую может вызвать ==, поэтому я бы использовал === по мере возможности.

//else if(elem.className=="optionsDivVisible") {elem.className = "optionsDivI...
else if(elem.className==="optionsDivVisible") {elem.className = "optionsDivI...

Я лично не против этого.

while(elem = document.getElementById("optionsDiv"+g))

Полагаю, это единственное утверждение для предыдущего оператора while. Я не против, но, в то же время, я не считаю плохим совет говорить, что вы всегда должны помещать свое заявление в блок {}.

return g;
2 голосов
/ 12 февраля 2011

Вы действительно должны (если вы этого не сделали) прочитать документы для JSLint .Первое предложение гласит: «JSLint обидит вас».

JSLint был написан Дугом Крокфордом и выражает его (очень обоснованное) представление о качестве кода и подверженном ошибкам кодировании.JSLint находит не только ошибки, но и «плохой стиль кодирования».Крокфорд объясняет причину предложения JSLints в очень интересном видео и в своей книге "JavaScript: хорошие части" .

1 голос
/ 13 февраля 2011

JSLint полезен для выявления распространенных ошибок в JavaScript и особенно полезен для менее опытных разработчиков JavaScript. Некоторые из них звук, в значительной степени неоспоримо хороший совет. Тем не менее, некоторые из них представляют только взгляды своего автора, некоторые из которых являются весьма субъективными. Вот мои взгляды на приведенные вами примеры:


Проблема в строке 5, символ 23: использовать буквенное обозначение массива []

Полезный совет. Литералы массива короче, безопаснее и менее неоднозначны, чем при использовании конструктора Array.


Проблема в строке 22: «focustextareas» использовался до того, как он был определен

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

foo();
function foo() {}

... тогда как следующее не так:

foo(); // TypeError
var foo = function() {};

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


Проблема в строке 125: ожидаемый '===' и вместо этого увидел '=='

иначе if (elem.className == "optionsDivVisible")

Сомнительный. Не нужно менять. То, что пытается вас предупредить, это то, что == выполняет принуждение к типу (правила которого приводят к некоторым неинтуитивным результатам), тогда как === - нет. Тем не менее, в этом случае оба операнда гарантированно являются строками (если elem действительно является элементом DOM), и в этом случае === и == определены для выполнения точно таких же шагов, и нет никакого преимущества для используя один над другим.


Проблема в строке 133: ожидалось условное выражение и вместо этого было выполнено присваивание

while (elem = document.getElementById ("optionsDiv" + g))

Хороший совет, но менять не нужно. Я считаю эту конструкцию удобной и действительно ее использую, но она выделяет потенциальный источник ошибок: если вместо * * был задан == или === 1063 * тогда это не выдаст ошибку и приведет к ошибкам, которые трудно диагностировать.


Проблема в строке 136, символ 13: Ожидается '{', и вместо этого он видит 'return'

возврат г;

Неуверенный . Требуется больше кода.

1 голос
/ 12 февраля 2011

5: Use the array literal notation [ ] Многие программисты предпочитают [], потому что он короче.
Функция 22: 'focustextareas' was used before it was defined может использоваться до ее определения, но в некоторых сложных случаях с замыканиями это было бы полезным предупреждением.
125: Expected '===' and instead saw '==' не имеет значения, имя класса всегда является строкой.
133: Expected a conditional expression ... просто полезное предупреждение.
136: Expected '{' and instead saw 'return' Трудно сказать. Это сообщение, вырванное из контекста, выглядит глупо.

...