Trong coffeescript, điều này rất đơn giản:
coffee> a = ['a', 'b', 'program']
[ 'a', 'b', 'program' ]
coffee> [_..., b] = a
[ 'a', 'b', 'program' ]
coffee> b
'program'
Es6 có cho phép một cái gì đó tương tự không?
> const [, b] = [1, 2, 3]
'use strict'
> b // it got the second element, not the last one!
2
> const [...butLast, last] = [1, 2, 3]
SyntaxError: repl: Unexpected token (1:17)
> 1 | const [...butLast, last] = [1, 2, 3]
| ^
at Parser.pp.raise (C:\Users\user\AppData\Roaming\npm\node_modules\babel\node_modules\babel-core\node_modules\babylon\lib\parser\location.js:24:13)
Tất nhiên tôi có thể làm theo cách của es5 -
const a = b[b.length - 1]
Nhưng có lẽ điều này hơi dễ bị sai sót bởi một lỗi. Có thể biểu tượng chỉ là thứ cuối cùng trong quá trình phá hủy?
...
trong es6, đặc biệt là nó chỉ có thể được sử dụng làm thứ cuối cùng khi cấu trúc lại hoặc trong danh sách tham số. Điều này có khả năng phản trực giác đối với một người nào đó đi vào es6 từ coffeescript và do đó câu hỏi này có khả năng hữu ích.
[1,2,3].slice(-1)
bạn thậm chí không thể phá hủy tương đương với [1,2,3].slice(0, -1)
. Đây là những thao tác phổ biến. ES6 hủy cấu trúc bằng cách nào đó là một trò đùa!