2012-05-09 11 views
35

¿Cuál es la mejor práctica para la continuación de línea en JavaScript? Sé que puede usar \ para cadenas. ¿Pero cómo dividirías el siguiente código?Caracteres de continuación de línea en JavaScript

var statement = con.createStatement("select * from t where 
(t.a1 = 0 and t.a2 >=-1) 
order by a3 desc limit 1"); 

Respuesta

46

Si bien entendido que:

var statement = con.createStatement('select * from t where ' 
            + '(t.a1 = 0 and t.a2 >=-1) ' 
            + 'order by a3 desc limit 1'); 

Para facilitar la lectura, está bien para alinear + operador en cada fila: De todos modos, unless you're using Ecmascript 2015, evitar a dividir una cadena de varias líneas con \, debido a que:

  1. no es estándar JavaScript
  2. Un WhiteSpa ce después de que el personaje podría generar un error de análisis
+0

He cometido un error estúpido aquí. Es fácil olvidarse de escribir un espacio entre cadenas. Tenga en cuenta el espacio entre las cadenas (lo tiene correcto); si falta espacio, la instrucción SQL no funcionará. – xralf

+1

¿Podría explicar por qué '' '\' '' no es javascript estándar? Al igual que, ¿nunca se menciona en la especificación ecmascript, mal visto o de lo contrario no es "estándar"? –

+3

Por cierto, "seleccionar *" es una mala práctica, especialmente cuando se genera la consulta desde una cadena SQL dinámica. Esto puede convertirse en una pesadilla de seguridad, entre otras cosas. Es una práctica mucho mejor indicar explícitamente las columnas y usar una llamada a un procedimiento de base de datos o una llamada a función de tabla para garantizar que se reduzca la responsabilidad de la inyección SQL. En SQL Server, SQL dinámico siempre debería usar sp_executesql. – devinbost

22

me gusta usar barras invertidas para la línea JavaScript continuación, así:

// validation 
    $(".adjustment, .info input, .includesAndTiming input, \ 
     .independentAdj, .generalAdj, .executiveAdj \ 
     #officeExpense, #longDistanceExpense, #digitalImages, #milesReimbursment, #driveTime, #statementTranscription").keypress(function (event) { 
+1

El problema con el uso de barras diagonales inversas es que una herramienta de minificación aplicada después del hecho puede hacer que el código deje de funcionar. –

+3

¿Tiene algún ejemplo para apoyar esto? Corriendo a través de http://jscompress.com/ parece funcionar bien. – user1477388

1

El "+" es para la concatenación de cadenas y la mayoría de los ejemplos se están ocupando con cuerdas. ¿Qué sucede si tiene un comando que necesita para enhebrar varias líneas, como una instrucción compuesta "si"? Necesita una barra invertida al final de cada línea que se debe continuar. Esto escapa al carácter invisible de la siguiente línea para que no delimite el comando en la declaración media.

+0

No, no necesita continuar para continuar con una expresión o declaración. Solo un string o regex puede necesitarlo. – doug65536

+0

[Prueba] (https://jsfiddle.net/6q1ygsjs/) – doug65536

3

Mi preferencia personal es similar a su primera respuesta allí, pero para mis ojos su legibilidad es más fácil:

var statement = con.createStatement 
    (
    'select * from t where ' + 
    '(t.a1 = 0 and t.a2 >=-1) ' + 
    'order by a3 desc limit 1' 
    ); 

Se logra un gran similitud con el formato de sintaxis SQL He estado usando durante casi 20 años :

SELECT * 
FROM t 
WHERE 
    t.a1 = 0 AND 
    t.a2 >=-1 
ORDER BY a3 DESC 
LIMIT 1 

Mantener la continuación (+ en JavaScript o AND en SQL) en el extremo derecho permite que el ojo se deslice hacia abajo de manera uniforme el borde izquierdo, comprobando lvalues ​​& sintaxis. Eso es un poco más difícil de hacer con la continuación de la izquierda, no es importante a menos que haga MUCHO de esto, en cuyo punto cada caloría que gasta es una caloría que podría haber sido salvada por una ligera mejora en el formato.

Dado que esta consulta es tan simple, dividir todo en formato SQL es un desperdicio de espacio y ancho de banda, por lo que el JavaScript sugerido se basa en seis líneas en lugar de diez. Al juntar los curlies en una línea, cada uno lo lleva a cuatro líneas, ahorrando espacio en blanco. No obstante, no es tan claro ni tan simple de editar.

Cuestiones relacionadas