Подтвердить что ты не робот

Безопасно ли разделять длинные JavaScript, если условия на несколько строк?

if ( true && true ||
  false && false ||
  true && true ) {
  console.log( 'Splitting condition into multiple lines worked!' );
}

Используется ли этот фрагмент кода во всех соответствующих браузерах?

PS: Я также обеспокоен IE8, поскольку у него слишком большой рынок, чтобы игнорировать на сегодняшний день.

4b9b3361

Ответ 1

Это объясняется в спецификации:

7.3 Линейные терминаторы

Как и символы пробела, символы терминатора строки используются для улучшить читаемость исходного текста и разделить токены (неделимые лексические единицы) друг от друга. Однако, в отличие от белого пространства символы, ограничители строк оказывают определенное влияние на поведение синтаксическая грамматика. Как правило, терминаторы линий могут любые два токена, но есть несколько мест, где они запрещены синтаксическая грамматика. Линейные терминаторы также влияют на процесс автоматическая точка с запятой (7.9).

7.9 Автоматическая точка с запятой

Некоторые операторы ECMAScript (пустой оператор, оператор переменной, оператор выражения, оператор do-while, оператор continue break, оператор return и оператор throw) должны быть заканчивается точкой с запятой. Такие точки с запятой всегда могут появляться явно в исходном тексте. Однако для удобства такие точки с запятой могут быть опущены из исходного текста в определенных ситуациях. Эти ситуации описаны, говоря, что точки с запятой автоматически вставлен в поток токенов исходного кода в тех ситуации.

Поэтому в большинстве случаев вы можете это сделать. И ваш случай является одним из них.

Ответ 2

Браузеры очень снисходительны, когда дело доходит до пробелов и разрывов строк в условных выражениях. Сейчас эти два формата являются отраслевым стандартом. Мне больше нравится синтаксис во втором сценарии.

Сценарий А

if (
  a === 123 &&
  b === 'abc'
) { ... }

Сценарий B

if (
  a === 123
  && b === 'abc'
) { ... }

AirBnb предпочтительный синтаксис: https://github.com/airbnb/javascript/issues/1380

Ответ 3

Я также недавно обнаружил, что у меня очень долгое состояние. Ниже вы найдете пример того, как я решил это, используя Boolean():

const a = new Array('', '  ', '    ');
const empty = Boolean(a[0].trim() == '' || 
                      a[1].trim() == '' || 
                      a[2].trim() == '' ||);
if (!empty){
   console.log("Fine!");
}else{
   console.log("Not fine!");   
}

Я надеюсь, что смогу помочь тебе.