Jump to content
  • 0

JSLint


hf3
 Share

Question

http://www.jslint.com/

Попробовал вставаить туда небольшой свой скритик строчек на 40 и привести в соответсвие. Стало страшно…

Я и хтмлному валидатору относится с большим недоверием… но тут…

А вы готовы писать строгий JavaScrip :) t ?

Link to comment
Share on other sites

16 answers to this question

Recommended Posts

  • 0

Не понимаю как это jQuery может проходить эту поделку ибо вот такой код, "валидацию" не проходит:

(function() {
var x = 0;
return {
init: function() {
return x;
}
}
})();

Причем ошибки выдает очень странные, например жалуется на отсутствие ";" на 7 строке. Однако ECMA позволяет считать перенос (\r\n) как завершение строки. Опять же ошибка "no global variable specified" какая-то странная. Быть такого не может, чтоб без глобальной переменной нельзя было б обойтись.

Опять же, тот же jQuery весь построен на анонимной функции...

Link to comment
Share on other sites

  • 0
Причем ошибки выдает очень странные, например жалуется на отсутствие ";" на 7 строке. Однако ECMA позволяет считать перенос (\r\n) как завершение строки. Опять же ошибка "no global variable specified" какая-то странная. Быть такого не может, чтоб без глобальной переменной нельзя было б обойтись.

Опять же, тот же jQuery весь построен на анонимной функции...

Аналогичные претензии. Чуваки явно не читали спеку ECMA.

Link to comment
Share on other sites

  • 0

Ну чуваки сильно перегибают палку. Это безсомнения.

Ну и цель как я понял у них была не создать валидатор, а скорее определить хоть какие то рамки и правила написания JSа. Так как JS позволяет много вольностей.

Таже самая точка с запятой...

Цели то правильные, но методы…

Link to comment
Share on other sites

  • 0

Если я ничего не путаю, нынешняя спека ECMA (5-я редакция) во многом появилась благодаря тому самому чуваку (Крокфорду), который уже десяток лет ведет эту поделку. И да, с некоторыми вещами в прошлых редакциях он (о5 же если я ничего не путаю) был не совсем согласен...

А еще этот чувак кое в чем соперничает с Чаком и Онотолеем... ;)

Link to comment
Share on other sites

  • 0
Если я ничего не путаю, нынешняя спека ECMA (5-я редакция) во многом появилась благодаря тому самому чуваку (Крокфорду), который уже десяток лет ведет эту поделку. И да, с некоторыми вещами в прошлых редакциях он (о5 же если я ничего не путаю) был не совсем согласен...

А еще этот чувак кое в чем соперничает с Чаком и Онотолеем... :)

Ну, по мнению отметившихся здесь товарищей, тем не менее, спецификацию он не читал :(

Link to comment
Share on other sites

  • 0

Насколько я понимаю, логика Крокфорда не то чтобы требует, но настоятельно рекомендует исправлять то, что разрешено при некоторых условиях, на то, что разрешено всегда. Чтобы не огрести проблем, например, при минификации того же скрипта в одну строку (тут могут аукнуться пропущенные ";") и т.п. Т.е. скорее не "не ешь кашу ложкой", а "не ешь мясо руками" (в принципе-то, ничего страшного, удобней даже, чем вилкой и ножом... но на приеме у англ. королевы может случиться конфуз:).

Link to comment
Share on other sites

  • 0

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

Link to comment
Share on other sites

  • 0

Вероятно, потому, что в JS глобальные переменные могут создаваться неявно (и неочевидно), и такие неявные засорения глобального объекта — однозначное зло (с этим Крокфорд не спорит). Вот что он сам пишет по поводу:

Ideally, an application, library, component, or widget defines only a single global variable. That variable should be an object which contains and is the root namespace for all of your stuff.
Link to comment
Share on other sites

  • 0
Насколько я понимаю, логика Крокфорда не то чтобы требует, но настоятельно рекомендует исправлять то, что разрешено при некоторых условиях, на то, что разрешено всегда.

Не поня-я-я-я-ятно... © Бабушка провинциального актера.

Есть стандарт, в нем написаны все правила языка. Сказано, что перевод строки является разделителем, значит является разделителем. Минификация - не обязательное условие для скрипта, а логическая надстройка над ним. Из проблем с минификацией не следует, что после всех строк нужно обязательно ставить ;. Почему мы должны делать какие-то вещи для минификации в ущерб той же читабельности кода? Почему одно важнее другого? Не вижу смысла.

Да и спека постоянно развивается. Понятия "разрешено всегда" не существует без обязательной приписки "в таких-то версиях языка".

Вероятно, потому, что в JS глобальные переменные могут создаваться неявно (и неочевидно), и такие неявные засорения глобального объекта — однозначное зло (с этим Крокфорд не спорит). Вот что он сам пишет по поводу:

А ему в голову ни разу не приходило, что глобальных объектов может быть несколько? Это звучит странно, правда, но это уже так и есть. Любой глобальный JS объект может быть локальным в некой объектной модели.

Link to comment
Share on other sites

  • 0
Почему мы должны делать какие-то вещи для минификации в ущерб той же читабельности кода?

Крокфорд считает, что явный разделитель в виде точки с запятой читабельности, наоборот, способствует. Как закрывающий тег в HTML (кстати, с улучшением читабельности при обязательном закрытии тегов я бы скорее поспорил — во многих случаях она лишь иллюзия:).

глобальных объектов может быть несколько?

Тем более нужно стараться, чтоб нечаянно не засорить их все :(

Link to comment
Share on other sites

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

Ну насчет ухудшения читабельности весьма спорно, однако никто же не заставляет пользоваться этим инструментом, если вы заранее знаете в каких тепличных условиях будет работать ваш код.

Link to comment
Share on other sites

  • 0
Крокфорд считает, что явный разделитель в виде точки с запятой читабельности, наоборот, способствует.

Мне глубоко плевать на Крокфорда в данном вопросе.

Особенно в таком примере

if ( x ) { try { if(x != undefined ) { x='{}'; } else { x='}{'; }; } catch(e) {}; };

После линтования получилось

var x; if ( x ) { try { if( x !== undefined ) { x='{}'; } else { x='}{'; } } catch(e) {} }

Тем более нужно стараться, чтоб нечаянно не засорить их все :)

Это нереально по правилам языка.

Ну насчет ухудшения читабельности весьма спорно, однако никто же не заставляет пользоваться этим инструментом, если вы заранее знаете в каких тепличных условиях будет работать ваш код.

Есть спецификация скрипта. Движок или делает все по спеке, или не делает. Тепличные условия - абсолютное следование спецификации, а не сомнительным советам Гуру.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy