Javascript обрабатывает Automati c Вставка точек с запятой в тех случаях, когда ваш синтаксис фактически нарушается. Проверяются следующие условия
Точка с запятой будет вставлена, когда она встретится с ограничителем строки, или '}', который не является грамматически правильным. Таким образом, если синтаксический анализ новой строки кода сразу после предыдущей строки кода все еще приводит к действительному значению JavaScript, ASI не будет запущен.
Если программа завершает работу на входе и ошибок не было, но это не полная программа, точка с запятой будет добавлена в конец. Что в основном означает, что точка с запятой будет добавлена в конец файла, если она отсутствует.
В грамматике есть определенные места, где, если появляется разрыв строки, он завершает оператор безусловно, и это добавит точку с запятой. Одним из примеров этого являются операторы return.
Пожалуйста, обратитесь к этой статье для более подробной информации: Точки с запятой - использовать или не использовать
В вашем если это нарушает первое правило, потому что
if(true){
options = {a: 12}
[r, s, e] = [3, 4, 5];
console.log(options, r, s, e);
}
будет рассматриваться как
if(true){
options = {a: 12}[r, s, e] = [3, 4, 5];
console.log(options, r, s, e);
}
, что в основном эквивалентно динамической c ссылке на объектное значение и присваиванию, например
options = {a: 12}[3, 4, 5] = [3, 4, 5];
и {a: 12}[3, 4, 5] = [3, 4, 5];
фактически установят значение объекта равным {a: 12, 3: [3, 4, 5]}
Однако на этом этапе опции также назначаются [3,4,5]