2012-05-09 20 views
35

Jaka jest najlepsza praktyka kontynuowania linii w kodzie JavaScript? Wiem, że możesz używać \ dla ciągów. Ale w jaki sposób podzieliłbyś poniższy kod?Znaki kontynuacji linii w kodzie JavaScript

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

Odpowiedz

46

Jeśli dobrze zrozumiałem:

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

Dla czytelności, to jest w porządku, aby wyrównać + operatora w każdym wierszu: Zresztą unless you're using Ecmascript 2015 unikać podzielić multilinii ciąg z \, ponieważ:

  1. To nie jest standardowy JavaScript
  2. whitespa ce po tym charakterze może generować błąd parsowania
+0

Zrobiłem tutaj głupi błąd. Łatwo zapomnieć o zapisaniu spacji między łańcuchami. Bądź świadomy przestrzeni między ciągami znaków (masz ją poprawnie), jeśli brakuje miejsca, instrukcja SQL nie będzie działać. – xralf

+1

Czy możesz wyjaśnić, dlaczego '' '' '' nie jest standardowym javascript? Jak to jest, czy nie jest ono wspomniane w specyfikacji ecmascript, nie jest mile widziane, czy też nie jest "standardowe"? –

+3

Nawiasem mówiąc, "wybierz *" jest złą praktyką, szczególnie podczas generowania zapytania z dynamicznego ciągu SQL. Może to stać się koszmarem dla bezpieczeństwa, między innymi. Lepszą praktyką jest jawne wskazywanie kolumn i korzystanie z wywołania procedury bazy danych lub wywołania funkcji z wartościami tabelowymi w celu ograniczenia odpowiedzialności za iniekcję SQL. W SQL Server dynamiczny SQL powinien zawsze używać sp_executesql. – devinbost

22

Lubię użyciu backslashy dla JavaScriptu kontynuacji linii, tak jak poniżej:

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

Problem z użyciem odwrotnych ukośników polega na tym, że narzędzie do minimalizacji zastosowane po fakcie może spowodować, że kod przestanie działać. –

+3

Czy masz jakieś przykłady, aby to wspierać? Uruchomienie przez http://jscompress.com/ wydaje się działać dobrze. – user1477388

1

Znak „+” jest dla konkatenacji ciągów i większość przykładów czynienia ze sznurkami. Co jeśli masz polecenie, które musisz napisać w wielu liniach, na przykład złożoną instrukcję "jeśli"? Potrzebujesz odwrotnego ukośnika na końcu każdej linii, która ma być kontynuowana. Spowoduje to uniknięcie niewidocznego znaku następnego wiersza, tak aby nie ograniczał polecenia w środkowej instrukcji.

+0

Nie, nie trzeba kontynuacji, aby kontynuować wyrażenie lub oświadczenie. Tylko ciąg lub wyrażenie regularne może go potrzebować. – doug65536

+0

[Dowód] (https://jsfiddle.net/6q1ygsjs/) – doug65536

3

Moje osobiste preferencje jest podobna do pierwszej odpowiedzi tam, ale na moich oczach jego czytelność jest łatwiej:

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

Uderza bliskie podobieństwo do formatu składni SQL Używam od prawie 20 lat :

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

Utrzymanie ciągłości (+ w JavaScript lub AND w SQL) po prawej stronie pozwala na oko ślizgać się równomiernie wzdłuż lewej krawędzi, sprawdzając lwartościami & składnię. Trochę trudniej jest zrobić z kontynuacją po lewej stronie - nieważne, chyba że zrobisz WIELE rzeczy, kiedy każda kaloria, jaką wydasz, jest kalorią, którą można zaoszczędzić dzięki niewielkiej poprawie formatu.

Ponieważ to zapytanie jest tak proste, podzielenie go na format SQL jest marnotrawstwem przestrzeni i przepustowości, dlatego sugerowany JavaScript jest na sześciu liniach zamiast dziesięciu. Zwijanie curlies w górę o jedną linię powoduje przejście do czterech linii, co pozwala zaoszczędzić odstępy. Jednak nie do końca jasne i łatwe do edycji.

Powiązane problemy