Как разбить строку на несколько строк кода в JavaScript?

198

Есть ли в JavaScript символ, разбивающий строку кода, чтобы он читался как непрерывный, несмотря на то, что он находится на новой строке?

Что-то вроде....

1. предупреждение («Пожалуйста, выберите файл   
2. \ удалить ");
ТТТ
источник

Ответы:

272

В вашем примере вы можете разбить строку на две части:

alert ( "Please Select file"
 + " to delete");

Или, когда это строка, как в вашем случае, вы можете использовать обратную косую черту, как предложил @Gumbo:

alert ( "Please Select file\
 to delete");

Обратите внимание, что такой подход с обратной косой чертой не обязательно предпочтителен и, возможно, не поддерживается повсеместно (у меня были проблемы с поиском точных данных по этому вопросу). Этого нет в спецификации ECMA 5.1 .

При работе с другим кодом (не в кавычках) разрывы строк игнорируются и совершенно приемлемы. Например:

if(SuperLongConditionWhyIsThisSoLong
  && SuperLongConditionOnAnotherLine
  && SuperLongConditionOnThirdLineSheesh)
{
    // launch_missiles();
}
Майкл Харен
источник
Можете ли вы разбить заявление if?
TTT
17
Но будьте осторожны с механизмом автоматической вставки точек с запятой: попробуйте вернуть return для одной строки и «string» для следующей в конце функции, и в результате вы получите неопределенное значение.
некоторые
Соответствует ли это стандартам? Будут ли все совместимые браузеры поддерживать его? У пожилых поддерживать его браузеры сегодня? Ни один из этих важных вопросов не рассматривается, -1.
Улидько
3
Ну ... если вы собираетесь задать кучу новых вопросов, которые еще не задавались, вы должны дать нам возможность ответить на них. Я обновил свой ответ с неудовлетворительной догадкой.
Майкл Харен
2
Остерегайтесь обратной косой черты. Он съест все пробелы, пока не найдет пустых. Таким образом, пример будет «оповещать»: Пожалуйста, выберите файл для удаления. Если вам нужен пробел между файлом и to, вы должны поместить его перед обратной косой чертой.
jgomo3
41

Поставьте обратную косую черту в конце строки:

alert("Please Select file\
 to delete");

Изменить     Я должен отметить, что это не является частью строк ECMAScript, так как символы конца строки не допускаются вообще:

A « КонецСтроки символ» не может появиться в строковый литерал, даже если перед ним обратную косую черту \. Правильный способ заставить символ конца строки быть частью строкового значения строкового литерала - это использовать escape-последовательность, например \nили \u000A.

Так что лучше использовать конкатенацию строк.


Обновление 2015-01-05     Строковые литералы в ECMAScript5 допускают указанный синтаксис:

Символ конца строки не может появляться в строковом литерале , кроме как как часть LineContinuation для создания пустой последовательности символов. Правильный способ заставить символ конца строки быть частью значения String строкового литерала состоит в использовании escape-последовательности, такой как \nили \u000A.

гумбо
источник
1
ECMAScript5 допускает это: « Символ конца строки не может появляться в строковом литерале , кроме как как часть LineContinuation для создания пустой последовательности символов. Правильный способ заставить символ\n\u000A конца строки быть частью значения String строкового литерала: использовать escape-последовательность, такую ​​как or . "
Oriol
1
@Oriol Спасибо за примечание, обновил ответ соответственно!
Гамбо
1
Это проблематично, если файл был создан в Windows. Другими словами, строки заканчиваются \r\nвместо \n?
Адам Плохер
31

ECMAScript 6 представляет строки шаблона :

Шаблонные строки - это строковые литералы, допускающие встроенные выражения. Вы можете использовать многострочные строки и функции интерполяции строк.

Например,

alert(`Please Select file   
to delete`);

предупредит

Please Select file   
to delete
Ориоль
источник
1
Вау, круто. Чтобы получить эти `` на клавиатуре, нажмите SHIFT + ´ два раза. На немецкой клавиатуре эта клавиша находится рядом с клавишей Backspace.
Наду
@ Наду Это зависит от клавиатуры. У меня есть `ключ. Поскольку это модификатор, он не написан напрямую. Наверное, поэтому вы подумали, что вам следует нажать на нее дважды, но это напишет два из них. Нажмите пробел, чтобы написать только один.
Oriol
Невероятно, что потребовалось так много времени, чтобы позволить многострочным строкам без причудливых хаков ... Вопрос: что будет использоваться в качестве разделителей строк - жестко закодированные символы или символы разрыва строки документа?
StanE
1
Существует проблема с `` в случае, когда вы хотите сделать увеличение файла * .js.
Раскольников
1
Учтите, что еще в марте 2018 года только 89% глобальных используемых браузеров поддерживают строки шаблонов согласно caniuse.com caniuse.com/#feat=template-literals
FFirmenich
7

Разбейте нить на две части 

alert ("Please select file " +
       "to delete");
Джейсон Пуньон
источник
9
Но не забывайте иметь пробел в конце первого или начале второго фрагмента;)
Маджид Фуладпур
4

Интересно отметить. Пытался:

alert("Some \
    string \
    wrapped \
    across \
    mutliples lines.")

И это сработало. Однако, случайно, после финального обратного слэша был пробел (все остальные обратные слэши были в конце строки). И это вызвало ошибку в JavaScript! Удаление этого пробела исправило ошибку.

Это в ADT для Android с использованием Cordova.

Там
источник
1
Я потратил большую часть моего дня на борьбу с этой проблемой, и я также обнаружил, благодаря вам, что символ пробела после любой косой черты заставлял мое ионное приложение не компилироваться. Спасибо!
rekordboy
1
Не могу поверить , что кто -то заметил , что это будет включать в себя все , что было отступа в коде как часть строки, так что пример становитсяSome\n<4 spaces>string\n<4 spaces>wrapped\n<4 spaces>across\n<4 spaces>multiple lines.
JHH
1

Вы можете просто использовать

1:  alert("Please select file" +
2:        " to delete");

Это должно работать

Хайме Гарсия
источник
0

Вы можете разбить длинную строковую константу на логические порции и назначить их в массив. Затем сделайте joinс пустой строкой в ​​качестве разделителя.

var stringArray = [
  '1. This is first part....',
  '2. This is second part.....',
  '3. Finishing here.'
];

var bigLongString = stringArray.join('');
console.log(bigLongString);

Выход будет:

  1. Это первая часть .... 2. Это вторая часть ..... 3. Заканчиваю здесь.

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

blackcatweb
источник
0

Хорошее решение здесь для пользователей VSCode , если проблема связана с разбивкой строки на несколько строк (я столкнулся с этим, когда мне пришлось тестировать длинный токен JWT, и каким-то образом использование литералов шаблона не помогло.)

Суджит Ю. Кулкарни
источник
-3

Я попробовал несколько из вышеперечисленных предложений, но получил предупреждение ILLEGAL в Chrome. Следующее сработало для меня (хотя проверено только в Chrome!)

alert('stuff on line 1\\nstuff on line 2);

выходит как ...

stuff on line 1
stuff on line 2

ЗАМЕТЬТЕ двойную обратную косую черту !! ... это кажется важным!

onionjohnny
источник
-5

Нет необходимости в ручном взломе кода. Просто добавьте \ n, где вы хотите сломать.

alert ("Please Select file \n to delete");

Это покажет предупреждение как

Please select file 
to delete.
нарендра
источник
вниз избиратель, можете ли вы сказать причину понижения голосов. Это решение работает для меня всегда.
Нарендра
27
Я не знаю, кто проголосовал за или почему; но только предположение: оператору хотелось знать, как расширить текстовый литерал на несколько строк кода, а не как вставить разрыв строки в выводе.
Зарепет