Nœud de destruction de la structure JS / V8?

Utilisation du noeud 8.4.0:

$ node > {x, y} = {x: 1, y: 2} { x: 1, y: 2 } > 

Cependant, les erreurs suivantes sont également non interactives: (le seul diff est le point-virgule)

 $ node > {x, y} = {x: 1, y: 2}; ... 

Également dans la console Chrome:

 > {x,y} = {x:1, y:2}  {x,y} = {x:1, y:2}; x VM253:1 Uncaught SyntaxError: Unexpected token = 

Quelqu’un peut-il expliquer cela?

Clarification

Il ne s’agit pas d’une déstructuration de type let, var ou cosnt qui fonctionne comme prévu. Ceci concerne les variables précédemment définies (ou le mode non ssortingct): depuis la console chrome:

 > let a, b;  [a, b] = [1, 2]; (2) [1, 2] > a  b  {a, b} = {a:3, b:4} {a: 3, b: 4} > a  b  {a, b} = {a:3, b:4}; x VM1297:1 Uncaught SyntaxError: Unexpected token = 

    Ce n’est pas un bug mais par conception. Voir ” Cession sans déclaration “:

    Une valeur peut être affectée à une variable avec une déstructuration distincte de sa déclaration.

     var a, b; ({a, b} = {a: 1, b: 2}); 

    La syntaxe ( .. ) autour de l’affectation est la syntaxe requirejse lors de l’utilisation d’une assignation de destructuration d’object littéral sans déclaration.

    {a, b} = {a: 1, b: 2} n’est pas une syntaxe autonome valide, car le {a, b} à gauche est considéré comme un bloc et non comme un object littéral.

    Cependant, ({a, b} = {a: 1, b: 2}) est valide, de même que var {a, b} = {a: 1, b: 2}

    La syntaxe appropriée pour déstructurer un object en variables existantes est la suivante:

     ({x, y} = {x: 1, y: 2}); 

    Cela permet à {x, y} = {x: 1, y: 2} d’être une expression. Sinon, {x, y} est interprété comme un bloc avec l’opérateur virgule, ce qui entraîne un Unexpected token = erreur.

    Cela fonctionne sans parenthèses et un point-virgule dans la console car il y est traité comme une expression. C’est effectivement la même chose que

     console.log({x, y} = {x: 1, y: 2});