Что за конструкция a.a = {} = 2 и как она работает?

Попалась такая конструкция, но нигде не могу найти что это значит.

Как это называется и что оно делает?

По идее сначала а.а становиться равно пустому объекту а потом?

Почему в итоге в консоли выведет {a:2}?

let a = {}
a.a = 1
a.a = {} = 2 //что это значит
console.log(a)

a.a = a = 2 // это выдает circular посередине

Ответы (1 шт):

Автор решения: vsemozhebuty

Если я не ошибаюсь, ваш загадочный фрагмент кода имеет академический интерес, хоть ничего полезного и не делает)

В череде присвоений операции проходят справа налево. Поэтому порядок такой:

  1. {} = 2: Поскольку присвоить объекту (да и вообще не-переменной) значение нельзя, мы имеем дело с пограничным случаем деструктурирования без переменной. Если вы вместо двойки будете использовать null или undefined, сообщение об ошибке это подтвердит. Деструктурирование других примитивов возможно: { toString } = 2 присваивает переменной toString функцию 2..toString.

  2. При этом присваивание, даже с деструктурированием, возвращает второй операнд, т. е. 2.

  3. Это значение в конце концов присваивается свойству a.a;

→ Ссылка