Каков одобренный JSLint способ создания длинной строки?
в качестве предисловия, да я знаю, что JSLint-это скорее набор рекомендаций, чем правил.
При использовании JSLint для очистки некоторого кода, который я унаследовал, есть ряд мест, где некоторые URL-адреса используются в строках. Они необходимы для сценария, но длиннее, чем стандартная длина строки в 50 символов.
Я просто проходил мимо этих конкретных строк, поскольку они не являются проблемой; тем не менее, мне стало любопытно, как лучше всего обрабатывать длинную строку литералы в коде JS.
Для строк разметки имеет смысл использовать конкатенацию строк:
'<div>' +
'<h1>Foo</h1>' +
'<p>Lorem ipsum</p>' +
'</div>'
Однако я не думаю, что это имеет смысл для URL:
'http://example.com/foo/bar/baz/fizz/buzz/lorem/ipsum/etc/...'
EDIT
Это также не имеет смысла для некоторых хэш-значений (например, используемых для ключа API):
//i.e. this made up string of me bashing on my keyboard
'0aidf9ejvr0e9vjkilkj34ioijs90eu8f9948joljse890f90jiljoi4'
3 ответа:
Я думаю, что ваш вопрос не может иметь только один правильный ответ. Есть много способов написания длинных строк в JavaScript, и это в основном вопрос вкуса, который вы выбираете. Я могу лишь изложить здесь свою точку зрения на этот предмет.
Прежде всего, вы можете использовать опцию
maxlenJSlint, чтобы изменить длину строки по умолчанию на любое значение, которое вам нравится. НапримерНо я думаю, что вы уже знаете обстановку./*jslint maxlen: 130 */Я полагаю, что вы можете использовать некоторые Минификаторы кода JavaScript для продуктивного использования ваших JavaScripts (например, Closure Compiler, Microsoft Ajax Minifier или какой-то другой). Как вы можете легко проверить на странице код
// ==ClosureCompiler== // @compilation_level SIMPLE_OPTIMIZATIONS // @output_file_name default.js // ==/ClosureCompiler== // ADD YOUR CODE HERE function hello(name) { var test = '<div>' + '<h1>Foo</h1>' + '<p>Lorem ipsum</p>' + '</div>'; return test + name; } hello('New user');Будет уменьшено до
function hello(a){return"<div><h1>Foo</h1><p>Lorem ipsum</p></div>"+a}hello("New user");И все строковые константы будут объединены. Таким образом, вы можете отформатировать код с длинными строковыми константами в основном так, чтобы код мог быть лучше прочитан. В английское сокращение Cups будет делать остальную работу за ты.
В случае длинных URL-адресов вы можете разбить длинные строки на любое место, которое вы найдете лучшим с логической точки зрения (я думаю, что это всегда будет на каком-то символе
'/'). В большинстве практических случаев у вас есть некоторыеbaseURL, которые будут добавлены. Таким образом, вы можете определить общие параметры проекта где-то в начале вашего файла или в отдельном файле JavaScriptvar baseLoremUrl = 'http://example.com/foo/bar/baz/fizz/buzz/lorem/';И использовать его позже как
'<a href="' + baseLoremUrl + 'ipsum/etc/' + '">Click me!</a>'Если у вас есть параметры, которые должны быть добавлены к URL как
'http://example.com/foo/bar/baz/fizz/buzz/lorem?x=123&y=ABC'Я использую всегда
baseLoremUrl + '?' + $.params({x: 123, y: 'ABC'})Чтобы сделать код более читаемым с одной стороны и быть уверенным, что все параметры будут правильно закодированы относительно encodeURIComponent, если это необходимо.
Все вышесказанное-это правила, которым я стараюсь следовать сам при написании своего кода JavaScript.
Вы могли бы использовать что-то вроде
Но это выглядит не слишком читабельно. В общем, некоторые рекомендации по кодированию явно снимают ограничение на длину строки для URL-адресов (это то же самое с инструкциями Java[ "http://example.com", "foo", "bar", "baz", ... "lastSegment" ].join("/");import- они могут быть сколь угодно длинными.)
Во-первых, я согласен с тем, что нет "одного решения" для этой ситуации, а во-вторых, я думаю, что это вопрос дизайна, а не технический вопрос. Это правда, что иногда имеет смысл разделить такие строки на несколько строк, как в случае представления HTML-кода, но иногда это не так, как в Примере URL, строки HASH / SHA или даже абзацы.
Таким образом, первая попытка добавить опцию '/*jslint maxlen: 130 * / ' поверх вашего JS-файла будет исправьте проблему, опустив ‘слишком длинную строку", проверив только этот файл. Но как насчет других строк в том же файле, которые тоже слишком длинны, но должны быть короче, в основном это обоснованное беспокойство от jshint.
Поскольку большинство случаев, когда мы хотим сохранить строку такой, какая она есть, независимо от длины, связаны со строковыми представлениями, такими как URL, хэши, SHAs и т. д., Использование заполнителя может быть хорошим подходом. В основном идея состоит в том, чтобы создать файл JS для их хранения и сделать его доступно через глобальную переменную. Затем вы можете просто вызвать его из любого скрипта на вашем сайте, например, как используется jQuery (просто помните, что вам нужно загрузить файл-заполнитель перед скриптами, которые его используют). Преимущество этого решения заключается в том, что вам нужно избежать проверки maxlen только в одном файле (на самом деле мы устанавливаем maxlen на очень большое число).My_placeholder.js
/*jslint maxlen: 500 */ //Init the placeholder MyFeature = MyFeature || {}; //Assign URL MyFeature.productApiURL = ‘http://this.is.the.url.to/product/API/’; //Assign a piece of TEXT MyFeature.productTermsOfUseText = ‘This is a very long text about something that you want to explain regarding your product terms of use for example......; //Assign an HTML fragment MyFeature.successfulMessageHTML = ‘<div class=”message”><div class=”header”>Successfully created</div><div class=”detail”>some text showing the detail...</div></div>’; //Assign a Regex to perform some validation MyFeature.validEmailRegex = new RegExp(/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/);My_feature_related_file.js
//doing random awesome things $.ajax({ url: MyFeature.productApiURL, success: function() { $(‘#message_container’).html(MyFeature.successfulMessageHTML); } }); //more awesome code hereНаконец еще одна хорошая вещь об этом подход заключается в том, что мы усиливаем семантический смысл этих длинных строк. Любой мог понять, что такое моя природа.productApiURL представляет продукты API URL-адрес или что MyFeature.successfulMessageHTML-это HTML-код для успешного сообщения для "моей функции". В основном мы объясняем, что это означает с точки зрения домена (успешное сообщение, API продукта, действительная электронная почта...) и в каком формате он представлен (HTML, URL, REGEX...).
Источник: http://moredevideas.wordpress.com/2013/09/16/line-too-long-on-jslint-and-jshint/