Це призначення руйнування об'єкта. Як і я, можливо, ви вважаєте це дивовижним, оскільки схожий на синтаксис деструктуризації об’єктів ES6 виглядає, але НЕ веде себе як буквальна побудова об'єкта.
Він підтримує дуже стисну форму, в яку ви зіткнулися, а також перейменування полів та аргументів за замовчуванням:
По суті, це {oldkeyname: newkeyname = defaultvalue, ...}. ':' НЕ роздільник ключа / значення; '=' є.
Випадок цього рішення дизайну мови полягає в тому, що вам, можливо, доведеться робити такі речі
; ({a, b} = деякий_об'єкт);
Додаткові парени перешкоджають розбору лівих фігурних дужок як блок, а провідна крапка з комою запобігає розбору паронів як виклик функції до функції у попередньому рядку.
Для отримання додаткової інформації див:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
Остерігайтеся, ключові помилки при призначенні деструктуризації об'єкта НЕ кидають; ви просто закінчуєтесь із "невизначеними" значеннями, будь то ключова помилка чи якась інша помилка, яка мовчки поширюється як "невизначена".
> var {rsienstr: foo, q: bar} = {p:1, q:undefined};
undefined
> foo
undefined
> bar
undefined
>