Точка с запятой перед квадратной скобкой

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

    ;[
      this.querySelector('[class$="-cover"] img'),
      this.querySelector('.FullscreenCarousel-cover-count')
     ].forEach(item => {
         // actions
    })
    })

2 ответа

Решение

Рассмотрим следующий (базовый) код:

doSomething()
[1].forEach(i => doAnotherThing(i))

При таком прочтении это выглядит просто - вызовите какую-нибудь функцию, а затем переберите массив и вызовите другую функцию. Два отдельных шага.

Однако JS не смотрит на пробелы. Что, если бы вы увидели такой код:

doSomething()[1].forEach(i => doAnotherThing(i))

Что это теперь значит? Теперь похоже нужно позвонитьdoSomething()который возвращает массив, возьмите элемент 1 этого массива, и, надеюсь , это массив, потому что мы повторяем его.

В отличие от:

doSomething();[1].forEach(i => doAnotherThing(i))

Что также сжимает пробелы, но теперь ясно, что вы имеете в виду, что это два совершенно разных шага. Основная причина, по которой ставится такая точка с запятой, - это прояснить ваши намерения.

      console.log('First line')
['a', 'b', 'c'].forEach((element) => console.log(element))
console.log('Third line')
  • 1: , затем напечатайте в новой строке и, наконец, напечатайте в следующей строке
  • 2:First line, затем распечатайтеa, b, cв первой строке и напечататьThird lineкак следующая строка
  • 3: Ошибка отсутствия точки с запятой
  • 4: Невозможно прочитать свойства undefined
Отвечать

##### Ответ: 4

Когда JavaScript встречает разрыв строки без точки с запятой, синтаксический анализатор JavaScript автоматически добавит точку с запятой на основе набора правил, называемыхAutomatic Semicolon Insertionкоторый определяет, будет ли разрыв строки в конце оператора или нет для вставки точки с запятой. Но он не предполагает точку с запятой перед квадратными скобками [...]. Таким образом, первые две строки считаются одним оператором, как показано ниже.

      console.log('First line')['a', 'b', 'c'].forEach((element) => console.log(element))

Следовательно, будет невозможно прочитать свойства неопределенной ошибки при применении квадратной скобки массива к функции журнала.

Другие вопросы по тегам