Як перервати рядок на більш ніж один рядок коду в 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
Але остерігайтеся механізму автоматичного введення крапки з комою: Спробуйте повернути на один рядок і "рядок" на наступному в кінці функції, і ви отримаєте невизначений результат.
десь

Чи відповідає це стандартам? Чи підтримуватимуть його всі сумісні браузери? Чи підтримують це старі браузери сьогодні? Жодне з цих важливих питань не охоплювало, -1.
ulidtko

3
Ну ... якщо ви збираєтесь задати купу нових питань, які вже не задавались, ви повинні дати нам можливість відповісти на них. Я оновив свою відповідь незадовільною думкою.
Майкл Харен

2
Остерігайтеся зворотної косої риски. Він з’їсть усі заготовки, поки не знайде непотріб. Тож приклад буде "попереджати": Виберіть файл, щоб видалити. Якщо ви хочете пробіл між файлом і до, слід поставити його перед нахилом.
jgomo3

41

Покладіть зворотний проріз у кінці рядка:

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

Редагувати     Я мушу зазначити, що це не є частиною рядків ECMAScript, оскільки символи завершення рядків взагалі не дозволені:

Символ ' LineTerminator ' не може відображатися в рядковому літералі, навіть якщо йому передує зворотна косою рисою \. Правильний спосіб стати символом термінального рядка частиною значення рядка літерального рядка є використання послідовності відведення, наприклад, \nабо \u000A.

Тож використання строкової конкатенації - кращий вибір.


Оновлення 2015-01-05     Рядок літералів в ECMAScript5 дозволяє вказаний синтаксис:

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


1
ECMAScript5 дозволяє це: " Символ термінатора рядка не може з'являтися в рядковому літералі, за винятком як частини LineContinuation для створення порожньої послідовності символів. Правильним способом стати причиною того, що символ термінального рядка є частиною значення String літерального рядка: використовувати керуючу послідовність , наприклад , як \nчи \u000A. "
Оріоль

1
@Oriol Дякую за замітку, оновив відповідь відповідно!
Gumbo

1
Це проблематично, якщо файл створений у Windows. Іншими словами, рядки закінчуються \r\nзамість \n?
Адам Плочер

31

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

Рядки шаблону є рядковими літералами, що дозволяють вбудовувати вирази. Ви можете використовувати багаторядкові рядки та функції інтерполяції рядків.

Наприклад,

alert(`Please Select file   
to delete`);

буде насторожити

Please Select file   
to delete

1
Нічого дивовижного. Щоб отримати ці кнопки `` на клавіатурі, натисніть SHIFT + 'два рази. На німецькій клавіатурі ця клавіша знаходиться біля клавіші зворотної області.
Nadu

@Nadu Це залежить від клавіатури. У шахти є `ключ. Оскільки це модифікатор, він не пишеться безпосередньо. Напевно, тому ви думали, що слід натиснути його двічі, але це напише два з них. Натисніть пробіл, щоб записати лише одну.
Оріол

Неймовірно, що знадобилося стільки часу, щоб дозволити багаторядкові рядки без фантазійних злому ... Питання: Що буде використовуватися як роздільники рядків - жорсткі коди (символи) або перерви рядків документа?
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

Я спробував декілька наведених вище пропозицій, але отримав ІЛЕГАЛЬНЕ попередження символів у інспекторі коду 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.