Как самый чистый способ написать многослойную строку в JavaScript? [дублировать

StackOverflow https://stackoverflow.com/questions/1589234

Вопрос

Этот вопрос уже имеет ответ здесь:

На самом деле это не должно добавлять новички, просто что -то читаемое.

Что -нибудь лучше этого?

str = "line 1" +
      "line 2" +
      "line 3";
Это было полезно?

Решение

Почти идентично ответу Никфица:

var str = [""
    ,"line 1"
    ,"line 2"
    ,"line 3"
].join("");
// str will contain "line1line2line3"

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

Другие советы

Мне нравится эта версия (отличная от вашей только в форматировании кода):

var str = "line 1"
        + "line 2"
        + "line 3";

Вы могли бы сделать

str = "\
line 1\
line 2\
line 3";

Как упоминалось в комментариях, анализаторы JavaScript справляются с этим штрафом (он работает во всех основных браузерах), но официально не является частью синтаксиса скрипта ECMA. Таким образом, он может работать или не работать с компрессорами, контролированием ошибок, и не гарантированно будет работать в браузерах.

Это может быть более читаемо, но не лучший способ сделать это. Может быть, когда -нибудь сценарий ECMA поддержат что -то вроде C#'S @"".

К вашему сведению. То, как вы предлагаете, это правильный путь и лучше, чем другие ответы. Jslint Только подтверждает вашу версию.

var str = [
    "line 1",
    "line 2",
    "line 3"
].join("");
// str will contain "line1line2line3"

Если вам действительно нужны новички в строке, замените .join("") с .join("\n")/

Последовательно.

Каким бы способом вы ни выбрали, делайте это точно так же на протяжении всего вашего приложения. Если вы работаете над приложением, в котором уже есть написанный код, примите соглашение, которое они установили, и перейдите к нему.

Да! Вы можете Используйте символ , чтобы JavaScript игнорируйте конец линейных символов.

str = 'line 1 \
line 2 \
line 3';

Однако как указал Элзо Валги, это не будет проверять использование JSLINT.

Это будет работать только в браузерах с E4X поддерживать - Я бы хотел, чтобы мы могли использовать это в IE

var str = <><![CDATA[

   Look, a multi-line
   string! < " // ' ? &

]]></>.toString();

Вот тот, который может быть полезен во время разработки при использовании 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);
}
*/});

Это не работает для Fire Fox, хотя это работает в хром.

Пример использования будет для написания/тестирования шейдеров Webgl. Во время разработки это намного приятнее работать, и позже вы всегда можете запустить это с помощью простой режима, которая преобразует этот синтаксис в версию поперечного браузера.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top