Dans coffeescript, c'est simple:
coffee> a = ['a', 'b', 'program']
[ 'a', 'b', 'program' ]
coffee> [_..., b] = a
[ 'a', 'b', 'program' ]
coffee> b
'program'
ES6 permet-il quelque chose de similaire?
> 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)
Bien sûr, je peux le faire de la manière es5 -
const a = b[b.length - 1]
Mais peut-être que c'est un peu sujet à une erreur. Le splat ne peut-il être que la dernière chose dans la déstructuration?
...
dans es6, en particulier qu'il ne peut être utilisé que comme dernière chose lors de la déstructuration ou dans une liste de paramètres. Ceci est potentiellement contre-intuitif pour quelqu'un qui entre dans es6 à partir de coffeescript et cette question est donc potentiellement utile.
[1,2,3].slice(-1)
vous ne pouvez même pas déstructurer l'équivalent [1,2,3].slice(0, -1)
. Ce sont des opérations courantes. La déstructuration ES6 est en quelque sorte une blague!