2015-12-28 2 views
2

Babel transpiles следующий ES6 кодПонимание ES6 к ES5 кода, transpiled Бабеля

test(){ 
    var list = [ 1, 2, 3 ] 
    var [ a, , b ] = list 
    [ b, a ] = [ a, b ] 
    } 

в этот

function test() { 
     var list = [1, 2, 3]; 

     var _list = list[(b, a)] = [a, b]; 

     var _list2 = _slicedToArray(_list, 3); 

     var a = _list2[0]; 
     var b = _list2[2]; 
    } 

Я не могу понять, что именно происходит с этой строки кода

var _list = list[(b, a)] = [a, b]; 

В частности, я не владею списком [(b, a)]. Любая помощь высоко ценится?

+0

Держу пари, что если бы вы немного поиграли в своей консоли JavaScript, вы бы поняли это. –

+0

Я немного экспериментировал в консоли, оценивая что-то вроде (1,2,10,9) и обнаружил, что возвращаемое значение всегда является значением формы последнего выражения. Я сделал это, чтобы узнать, что будет (a, b) оцениваться в списке [(b, a)]. Но я ничего не знал о том, что такое оператор запятой и как он работает. Не зная, что он назвал на этом языке, я не смог проверить мои выводы. А также часть вставки в двоеточие, которую объяснил @loganfsmyth, вероятно, никогда бы не поразила меня. – RamKris

ответ

3

Короткий ответ, что

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]. Оператор запятой обрабатывает список выражений по одному, а затем, наконец, оценивает результат последнего выражения.

Смежные вопросы