Сначала для разрешения любых сомнений: Назначение всегда выполняется справа налево , как в «обычном старом JS» и большинстве языков программирования.
Однако в ES6 у вас много нового синтаксиса для упрощения назначений.
Может быть, вас удивит то, что слева есть какая-то "структура объекта".
Существует сочетание того, что называется деструктурирование и некоторого синтаксического сахара, когда имена переменных идентичны именам свойств, это помогает назначать много переменных одновременно, снимая их "с" объект (или массив!),
Это не относится к const
, оно действительно для любого назначения, и этот синтаксис также может использоваться для параметров функции.
1: разрушение
(одновременное присвоение нескольких значений слева от одного объекта или одного массива справа)
Примеры:
// here a and b take the value from the source.a and source.b, respectively
const source = { a: 1, b: 2, c: 3}
const {a, b} = source
console.log(a,b)
// same for arrays
// here a and b have taken the first and the second value of the source array, repectively.
const source = [1, 2, 3]
const [a, b] = source
console.log(a,b)
// and you can use `...` to get *all the other values*
// here a will take the first value, and b will get all the other values, which is `[2, 3]`
const source = [1, 2, 3]
const [a, ...b] = source
console.log(a,b)
2 и 3: объект назначен буквально
Это почти ванильное назначение объектов ES5 JavaScript, с небольшим количеством синтаксического сахара, чтобы избежать повторения name: name
.
props
слева назначен новый объект, содержащий объект, созданный справа.
Единственное отличие между 2 и 3 состоит в том, что в примере 2 в области действия функции создается новая привязка const props
, которая фактически скрывает props
от параметров .
В примере 3 существующий props
в качестве аргумента мутировал для назначения нового значения.
Я думаю, что пример 2 - это ошибка программирования , если честно.
В любом случае, оба «2» и «3» идентичны этому «псевдо-JavaScript»:
// here we susppose that there are some exiting `child` `style` `disable` variable, and an array `otherParam`
props = {
child: child,
style: style,
disable: disable,
otherParam: /* an array which is a copy of an existing "otherParam" array , with spread operator*/
};
Выше приведен сокращенный синтаксис для создания новых объектов из существующих переменных с сохранением тех же имен.