На самом деле не нужно добавлять новые строки, просто что-то читаемое.Какой самый чистый способ написать многострочную строку в JavaScript?
Что-нибудь лучше этого?
str = "line 1" +
"line 2" +
"line 3";
На самом деле не нужно добавлять новые строки, просто что-то читаемое.Какой самый чистый способ написать многострочную строку в JavaScript?
Что-нибудь лучше этого?
str = "line 1" +
"line 2" +
"line 3";
Почти идентичен ответ NickFitz в:
var str = [""
,"line 1"
,"line 2"
,"line 3"
].join("");
// str will contain "line1line2line3"
Разница, код немного более ремонтопригоден, потому что линии могут быть повторно заказаны без учета где запятые. Нет синтаксических ошибок.
Это также делает его полезным выполните автоматические разрывы строк с символом объединения \ n. Очень удобно. –
Вы могли бы сделать
str = "\
line 1\
line 2\
line 3";
Как уже упоминалось в комментариях, JavaScript парсеры справиться с этим штраф (он работает во всех основных браузерах), но не является официальной частью синтаксиса ECMA Script. Таким образом, он может работать или не работать с компрессорами, проверками ошибок и не гарантированно работает в браузерах.
Это может быть более читаемым, но это не лучший способ сделать это. Возможно, сценарий ECMA будет поддерживать что-то вроде C# @ "" когда-нибудь.
Ничего себе. Это действительно работает. Спасибо, Гордон! Я не знал, что вы можете сделать это вообще ... –
читается, но не подходит для парсеров ошибок js! –
@Thomas: «В каждом примере, который я видел, вы также помещаете a \ after line3». Просто статья, которую вы связали, имела опечатку, это не значит, что это правильно. прочитайте остальную часть своей статьи, он сделал это только один раз, в первом примере. – geowa4
Да! Вы можете use the \ character to have JavaScript ignore end of line characters.
str = 'line 1 \
line 2 \
line 3';
Однако, как pointed out by Elzo Valugi, это не будет проверять с помощью JSLint.
Насколько я помню, это не работает в некоторых браузерах. Предположительно некоторые версии IE. –
Ionut: Да, вам нужно будет протестировать его во всех браузерах, о которых вы беспокоитесь, и если бы это было неудачно в браузере, я бы заподозрил, что это будет IE. Но я тестировал это в Firefox, и он работает там. –
FYI. То, как вы предлагаете, это правильный путь и лучше, чем другие ответы. JsLint только подтверждает вашу версию.
+1 для jslint. – geowa4
Совет: держите эти строки короткими. Если они растягиваются на экране, вы не видите +, и он становится нечитаемым. Или положите + в начале строк, как предлагает Ionut. –
Последовательно.
Каким бы способом вы ни выбрали, сделайте это точно так же, как и во всем приложении. Если вы работаете над приложением, которое уже написало код, примите соглашение, которое они задают и идут с ним.
Жаль, что не разрешено голосовать более одного раза. Это окончательное решение потерять энергию и время для споров для «One Right Way ™», чтобы делать что-то (настолько распространенное в нашей отрасли). – dreftymac
Мне нравится эта версия (отличается от вашей только при форматировании кода):
var str = "line 1"
+ "line 2"
+ "line 3";
Да - это легче понять с первого взгляда. –
это также не подтверждает. У меня был сценарий с некоторым html, как это, и мне пришлось его переделать. –
Вы должны были избежать HTML, способ построения строки не имеет ничего общего с проверкой. –
var str = [
"line 1",
"line 2",
"line 3"
].join("");
// str will contain "line1line2line3"
Если вы действительно хотите, символы новой строки в строку, а затем заменить .join("")
с .join("\n")
/
- этот метод все же быстрее, чем альтернатива concatenation «str» + «str» или не имеет значения для сегодняшних браузеров? –
join быстрее, если у вас есть maaaaaaaaaany части для конкатенации, потому что «+» будет выполняться (n-1) раз, создавая временные результаты на каждом шаге. Для получения дополнительной информации см. Http://video.yahoo.com/watch/4141759/11157560 at 23:08 – user123444555621
У нас был скрипт, который построил всю страницу через «str» + «str», и это было довольно медленно (около 30 секунд). нагрузка). Мы изменили использование такой системы на основе массива, как это, и она упала менее чем на одну секунду. Итак, да, это быстрее :) –
Это будет работать только в браузерах с поддержкой E4X - Хотелось бы, чтобы мы могли использовать его в IE
var str = <><![CDATA[
Look, a multi-line
string! < " // ' ? &
]]></>.toString();
Вам не нужен литерал XMLList ('<> ..>'). Вы можете просто сделать '. ToString()' –
Вы протестировали? По некоторым причинам он не работает в Firefox. Согласно стандарту, раздел XMLCDATA - XMLMarkup, поэтому является XMLInitialiser, который должен быть распознан движком как PrimaryExpression (?) – user123444555621
Это больше не поддерживается в Firefox начиная с версии 17. Я не верю, что ЛЮБЫЕ браузеры поддерживают это сейчас. –
Вот что может быть полезно при разработке Chrome.
function FSTR(f) {
// remove up to comment start and trailing spaces and one newline
s = f.toString().replace(/^.*\/\* *\r?\n/,"");
// remove the trailing */} with preceeding spaces and newline
s = s.replace(/\n *\*\/\s*\}\s*$/,"")
return s;
}
s = FSTR(function(){/*
uniform vec2 resolution;
uniform float time;
void main(void)
{
vec2 p = -1.0 + 2.0 * gl_FragCoord.xy/resolution.xy;
vec2 cc = vec2(cos(.25*time), sin(.25*time*1.423));
...
float color = sqrt(sqrt(dmin))*0.7;
gl_FragColor = vec4(color,color,color,1.0);
}
*/});
Это не работает для Firefox, хотя он работает в Chrome.
Пример использования для написания/тестирования webgl-шейдеров. Во время разработки это гораздо приятнее для работы, и позже вы всегда можете запустить это с помощью простого регулярного выражения , которое преобразует этот синтаксис в кросс-браузерную версию.
Это теперь работает в Firefox и последних браузерах. См. [Этот ответ] (http://stackoverflow.com/a/5571069/331508). –
Несомненно, пример в этом вопросе более читабельен, чем ответ @dreftymac no? –
Приветствия @jasdeepkhalsa. Есть два способа взглянуть на это. Вышеприведенный пример определенно читается благодаря наличию меньшего количества символов. Проблема возникает, когда вы должны * взаимодействовать * с кодом, добавляя или удаляя строки или изменяя порядок строк. Пример dreftymac содержит больше символов, но гораздо проще взаимодействовать с кодом без случайного запуска синтаксической ошибки. – dreftymac