Curly brackets (braces) in Node.js 'require' statement

我试图理解下面两个“要求”陈述之间的区别。

具体来说,围绕 ipcMain{ }的目的是什么?

const electron = require('electron')


const {ipcMain} = require('electron')

它们似乎都指定了 electron模块的内容,但它们的功能明显不同。

有人能透露点什么吗?

25090 次浏览

第二个例子使用了解构。

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

例如(function tions.js) :

module.exports = {
func1,
func2
}

包含在你的档案中:

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

现在你可以单独给他们打电话,

func1()
func2()

而不是:

const Functions = require('./functions')

被称为点符号:

Functions.func1()
Functions.func2()

希望这个能帮上忙。

You can read about destructuring 给你, it is a very useful part of ES6 and can be used with arrays as well as objects.

有了 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)

Check:

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

参见: What does curly brackets in the var { … } = … statements do?