Первый помещает полный дескриптор модуля в переменную с именем xx
.
Второй получает свойство xx
из дескриптора модуля и помещает его в переменную с именем xx
. Итак, второй будет таким же, как:
const xx = require('module').xx;
Также первый использует var
, а второй использует const
, но я предполагаю, что вы уже знали об этой разнице.
Сказал по-другому:
Это:
const {xx} = require('module');
является ярлыком для этого:
const xx = require('module').xx;
Это наиболее полезно в качестве ярлыка при использовании require()
, когда вы хотите получить кучу свойств из модуля и назначить их все переменным верхнего уровня в вашем модуле следующим образом:
const {xx, yy, zz, aa, bb, cc} = require('module');
, что, очевидно, потребовало бы гораздо больше кода для репликации, чем эта строка, если вы не использовали синтаксис деструктурирования объекта.
FYI, все это всего лишь форма деструктуризация объекта (функция добавлена в Javascript в ES6). Это не что-то конкретное c для require()
, просто require()
часто возвращает объект с набором свойств, которые его интересуют. См. Эту статью "Мертвая простота в разрушении" для краткого изложения того, что делает деструктурирование объекта.