¿Cuál es la manera más limpia para escribir una cadena de varias líneas en JavaScript? [duplicar]

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

Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

         

En realidad no tiene que añadir saltos de línea, sólo algo de lectura.

Cualquier cosa es mejor que esto?

str = "line 1" +
      "line 2" +
      "line 3";
¿Fue útil?

Solución

Casi idéntica a la respuesta de NickFitz:

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

La diferencia, el código es un poco más fácil de mantener porque las líneas pueden ser re-ordenados sin tener en cuenta dónde están las comas. No hay errores de sintaxis.

Otros consejos

Me gusta esta versión (diferente a la suya solo en el formato del código):

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

Usted podría hacer

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

Como se ha mencionado en los comentarios, analizadores de javascript manejan este fino (funciona en todos los navegadores), pero no es oficialmente parte de la sintaxis ECMA Script. Como tal, puede o no puede trabajar con compresores, damas de error y no se garantiza que funcione en los navegadores.

Esto puede ser más fácil de leer, pero no es el camino 'mejor' para hacerlo. Tal secuencia de comandos ECMA apoyará algo así como C # 's @ "" algún día.

Para su información. La forma en que sugieren que es la forma correcta y mejor que las otras respuestas. JSLint sólo valida su versión.

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

Si usted quiere realmente saltos de línea en la cadena, luego vuelva a colocar .join("") con .join("\n") /

Consistentemente.

forma Cualquiera que elija, lo hacen de la misma manera en toda la aplicación. Si usted está trabajando en una aplicación que ya ha escrito el código, aceptar la convención que se establecen e ir con ella.

Sí! Puede utilizar el \ personaje tener JavaScript ignorar caracteres de fin de línea .

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

Sin embargo, como señalado por Elzo valugi , esto no va a validar el uso de JSLint.

Esto sólo funcionará en los navegadores con E4X apoyo - me gustaría poder utilizarlo en IE

var str = <><![CDATA[

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

]]></>.toString();

Aquí hay uno que puede ser útil durante el desarrollo al utilizar 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);
}
*/});

Esto no funciona para Firefox , aunque funciona en Chrome.

Ejemplo de uso sería para escribir / pruebas de shaders WebGL. Durante el desarrollo de este es mucho más agradable para trabajar y más tarde siempre se puede ejecutar sobre esto con un simple expresión regular que los conversos que la sintaxis en una versión multi-navegador.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top