Node.js“require”语句中的大括号(大括号)

IT技术 javascript node.js ecmascript-6 destructuring
2021-01-18 07:54:30

我试图了解下面两个“要求”语句之间的区别。

具体来说,{ }s 缠绕的目的是什么ipcMain

const electron = require('electron')

const {ipcMain} = require('electron')

它们似乎都分配了electronmodule的内容,但它们的功能显然不同。

任何人都可以解释一下吗?

2个回答

第二个例子使用解构。

这将调用从所需module导出的特定变量(包括函数)。

例如(functions.js):

module.exports = {
   func1,
   func2
}

包含在您的文件中:

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

现在你可以单独调用它们,

func1()
func2()

与:

const Functions = require('./functions')

使用点表示法调用:

Functions.func1()
Functions.func2()

希望这可以帮助。

您可以在此处阅读有关解构的信息,它是 ES6 中非常有用的部分,可以与数组和对象一起使用。

当我输入{1, 2, 3}node REPL 并 get时会发生什么样的解构3
2021-03-31 07:54:30

使用const electron = require('electron'),该ipcMainmodule将作为electron.ipcMain.

随着const {ipcMain} = require('electron')ipcMainmodule将作为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 { … } = …什么作用?