理解由 Babel 转译的 ES6 到 ES5 代码
Understanding ES6 to ES5 code as transpiled by Babel
Babel 转译以下 ES6 代码
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)]一窍不通。非常感谢任何帮助?
简短的回答是
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]
。逗号运算符一次处理一个表达式列表,然后最终计算出最后一个表达式的结果。
Babel 转译以下 ES6 代码
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)]一窍不通。非常感谢任何帮助?
简短的回答是
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]
。逗号运算符一次处理一个表达式列表,然后最终计算出最后一个表达式的结果。