Как разбить строку на несколько строк кода в 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


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


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. Заканчиваю здесь.

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


0

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


-3

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

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

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

stuff on line 1
stuff on line 2

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


-5

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

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

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

Please select file 
to delete.

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

27
Я не знаю, кто проголосовал за или почему; но только предположение: оператору хотелось знать, как расширить текстовый литерал на несколько строк кода, а не как вставить разрыв строки в выводе.
— Зарепет
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.