Вопрос по javascript – Символы продолжения строки в JavaScript

41

Какова лучшая практика для продолжения линии вJavaScript? Я знаю, что вы можете использовать\ для струнных. Но как бы вы разбили следующий код?

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

Ваш Ответ

4   ответа
1

& Quot; + & quot; предназначен для объединения строк, и большинство примеров имеют дело со строками. если у вас есть команда, которую вам нужно поместить в несколько строк, например, составной & quot; if & quot; заявление? Вам нужна обратная косая черта в конце каждой строки, которая должна быть продолжена. Это экранирует невидимый символ следующей строки, так что он не будет разделять команду в середине инструкции.

Нет, вам не нужны продолжения, чтобы продолжить выражение или утверждение. Только строка или регулярное выражение могут понадобиться.
Proof
5

но на мой взгляд его читабельность проще:

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

Он очень похож на формат синтаксиса SQL, которым я пользуюсь почти 20 лет:

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

Сохраняя продолжение (+ в JavaScript илиAND в SQL) в дальнем правом углу позволяет глазу равномерно скользить по левому краю, проверяя lvalues & amp; синтаксис. Это немного сложнее сделать с продолжением слева - это не важно, если вы не делаете МНОГО этого материала, и в этот момент каждая потраченная вами калория является калорией, которая могла бы быть сохранена небольшим улучшением формата.

Поскольку этот запрос очень прост, разбиение его на формат SQL приводит к расточительству пространства и пропускной способности, поэтому рекомендуемый JavaScript состоит из шести строк вместо десяти. Свертывание завитков на одну строку приводит к четырем строкам, сохраняя пробелы. Не совсем так ясно или так просто редактировать.

54

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

Для удобства чтения можно выровнять+ оператор на каждом ряду: Тем не мение,если вы не используете Ecmascript 2015, избегайте разбивать многострочную строку\, так как:

It's not standard JavaScript A whitespace after that character could generate a parsing error
Я сделал глупую ошибку здесь. Легко забыть написать пробел между строками. Имейте в виду, что между строками есть пробел (это правильно), если пробел отсутствует, оператор SQL не сработает. xralf
Кстати, "выберите *" это плохая практика, особенно при генерации запроса из динамической строки SQL. Это может стать кошмаром безопасности, между прочим. Гораздо эффективнее явно указывать столбцы и использовать вызов процедуры базы данных или вызов функции с табличным значением, чтобы снизить вероятность внедрения SQL-кода. В SQL Server динамический SQL всегда должен использовать sp_executesql.
Не могли бы вы объяснить, почему\ это не стандартный javascript? Например, он никогда не упоминается в спецификации ecmascript, не одобряется или иным образом не является «стандартным»; ?
@devinbost, в этом нет ничего плохого, он использует статические параметры в своем запросе. Семантически он хочет, чтобы все столбцы были из t, где a1 равно нулю, а a2 больше -1. Количество возвращаемых столбцов не имеет ничего общего с внедрением SQL.
да, пробел после этого символа может вызвать ошибку синтаксического анализа
23

JavaScript, вот так:

    // validation
    $(".adjustment, .info input, .includesAndTiming input, \
        .independentAdj, .generalAdj, .executiveAdj \
        #officeExpense, #longDistanceExpense, #digitalImages, #milesReimbursment, #driveTime, #statementTranscription").keypress(function (event) {
Проблема с использованием обратной косой черты заключается в том, что инструмент минимизации, применяемый после факта, может привести к тому, что код перестанет работать.
У вас есть примеры, подтверждающие это? Работает черезjscompress.com Кажется, работает нормально.

Похожие вопросы