节点中的括号(括号)需要声明

Apr*_*llo 73 javascript destructuring node.js ecmascript-6

我试图理解下面两个require语句之间的区别.

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

const electron = require('electron')

const {ipcMain} = require('electron')
Run Code Online (Sandbox Code Playgroud)

它们似乎都分配了电子模块的内容,但它们的功能明显不同.

任何人都能解释一下吗?

ale*_*xi2 109

第二个例子使用解构.

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

例如(functions.js):

module.exports = {
   func1,
   func2
}
Run Code Online (Sandbox Code Playgroud)

包含在您的文件中:

const { func1, func2 } = require('./functions')
Run Code Online (Sandbox Code Playgroud)

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

func1()
func2()
Run Code Online (Sandbox Code Playgroud)

而不是:

const Functions = require('./functions')
Run Code Online (Sandbox Code Playgroud)

使用点表示法调用:

Functions.func1()
Functions.func2()
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

您可以在这里阅读有关解构的内容,它是ES6中非常有用的部分,可以与数组和对象一起使用.

  • 同意这是一个清晰而奇妙的解释.今晚帮助了我.谢谢! (3认同)

use*_*737 7

随着const electron = require('electron')ipcMain模块将作为electron.ipcMain

随着const {ipcMain} = require('electron')ipcMain模块将作为ipcMain

这种构造称为对象解构,其实现与Python构造相同

from library import ...
Run Code Online (Sandbox Code Playgroud)

它的基本形式允许您直接引用对象的属性

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)
Run Code Online (Sandbox Code Playgroud)

校验:

const {ipcMain} = require('electron')
const myElectron = require('electron')
const myipcMain = myElectron.ipcMain
console.log(myipcMain===ipcMain) // true
Run Code Online (Sandbox Code Playgroud)

您可以使用解构分配来导入Javascript对象的多个属性,例如:

const { app, BrowserWindow, ipcMain } = require('electron')
Run Code Online (Sandbox Code Playgroud)

如果您使用的属性不存在,它将设置为,undefined并且不会出现错误。

const {app, BrowserWindow, ipcMain, doesntExist} = require('electron')
console.log(doesntExist) // undefined
Run Code Online (Sandbox Code Playgroud)

另请参阅:语句中大括号的作用是var { … } = …什么?