Фигурные скобки в заявлении Node.js 'require'

94

Я пытаюсь понять разницу между двумя приведенными ниже утверждениями «require».

В частности, какова цель { }обертки s ipcMain?

const electron = require('electron')

const {ipcMain} = require('electron')

Кажется, что они оба назначают содержимое electronмодуля, но, очевидно, работают по-разному.

Кто-нибудь может пролить свет?

Кстати, Армадилло
источник

Ответы:

134

Во втором примере используется деструктуризация.

Это вызовет конкретную переменную (включая функции), которые экспортируются из требуемого модуля.

Например (functions.js):

module.exports = {
   func1,
   func2
}

включен в ваш файл:

const { func1, func2 } = require('./functions')

Теперь вы можете называть их индивидуально,

func1()
func2()

в отличие от:

const Functions = require('./functions')

вызываются с использованием точечной записи:

Functions.func1()
Functions.func2()

Надеюсь это поможет.

Вы можете прочитать о деструктуризации здесь , это очень полезная часть ES6, которая может использоваться как с массивами, так и с объектами.

Alexi2
источник
19

С const electron = require('electron'), то ipcMainмодуль будет доступен в качестве electron.ipcMain.

С const {ipcMain} = require('electron')в ipcMainмодуль будет доступен в качестве ipcMain.

Эта конструкция называется деструктуризацией объекта и выполняет то же самое, что и конструкция Python.

from library import ...

В своей базовой форме он позволяет вам напрямую обращаться к свойствам объекта:

var o = {prop1: '1', prop2: 2}
var {prop1, prop2} = o
console.log(prop1) // '1' (same as o.prop1)
console.log(prop2) // 2 (same as o.prop2)

Проверьте:

const {ipcMain} = require('electron')
const myElectron = require('electron')
const myipcMain = myElectron.ipcMain
console.log(myipcMain===ipcMain) // true

Вы можете использовать назначение деструктуризации для импорта нескольких свойств объекта JavaScript, например:

const { app, BrowserWindow, ipcMain } = require('electron')

Если вы используете свойство, которого не существует, для него будет установлено значение, undefinedи вы не получите сообщения об ошибке.

const {app, BrowserWindow, ipcMain, doesntExist} = require('electron')
console.log(doesntExist) // undefined

См. Также: Что делают фигурные скобки в var { … } = …утверждениях?

user2314737
источник