Короткий ответ, что
var [ a, , b ] = list
[ b, a ] = [ a, b ]
такой же, как
var [ a, , b ] = list[ b, a ] = [ a, b ]
, потому что вставка автоматической точки с запятой не относится к этой ситуации. Же случай относится к этому примеру ES5:
var list = [1, 2, 3]
var value = list
[1]
console.log(value);
Если запустить этот код, он будет регистрировать 2
, не [1, 2, 3]
, поскольку индекс применяется к предыдущей строке, а не рассматривать как массив на следующей строке.
Автоматическая вставка точки с запятой обычно применяется в тех случаях, когда синтаксический анализатор обнаруживает синтаксическую ошибку, возвращается шаг и пытается после вставки точки с запятой.
В обоих случаях содержимое следующей строки отлично действует как часть предыдущей строки, поэтому оно обрабатывается как таковое без автоматической точки с запятой.
В вашем примере list[a, b]
анализируется как обращение к индексу с использованием результата операции с запятой, которая по существу оценивает значение list[b]
. Оператор запятой обрабатывает список выражений по одному, а затем, наконец, оценивает результат последнего выражения.
Держу пари, что если бы вы немного поиграли в своей консоли JavaScript, вы бы поняли это. –
Я немного экспериментировал в консоли, оценивая что-то вроде (1,2,10,9) и обнаружил, что возвращаемое значение всегда является значением формы последнего выражения. Я сделал это, чтобы узнать, что будет (a, b) оцениваться в списке [(b, a)]. Но я ничего не знал о том, что такое оператор запятой и как он работает. Не зная, что он назвал на этом языке, я не смог проверить мои выводы. А также часть вставки в двоеточие, которую объяснил @loganfsmyth, вероятно, никогда бы не поразила меня. – RamKris