Node.js中对象解构获取模块导出值为undefined的原因咨询
为什么第一种导入方式会返回undefined?
这问题出在你对解构赋值的逻辑理解偏差上,咱们一步步拆解清楚:
首先,先明确你的模块导出结构:假设core模块的主文件(比如index.js)里是这样导出globals的:
// core/index.js const globals = { /* 你的目标对象内容 */ }; module.exports = { globals };
这时候require('core')会返回一个对象:{ globals: 你的目标对象 }。
两种导入方式的区别
正确的写法:
const globals = require('core').globals;
这个操作是直接从require('core')返回的对象中,取出名为globals的属性值(也就是你的目标对象),并赋值给变量globals,所以能得到正确结果。出问题的写法:
const {globals} = require('core').globals;
这个操作分两步:- 第一步:
require('core').globals已经拿到了你的目标对象; - 第二步:用解构赋值
{globals} = 目标对象,试图从目标对象本身里取出名为globals的属性。
如果你的目标对象里并没有
globals这个属性,那解构出来的自然就是undefined了——这就是问题的核心!- 第一步:
举个具体例子
假设你的globals对象是:
const globals = { appName: "MyApp", version: "1.0" };
那require('core').globals就是这个{ appName: "MyApp", version: "1.0" }对象。这时候用const {globals} = 这个对象,相当于找globals.globals,显然不存在,所以返回undefined。
如果你非要用解构写法
如果想通过解构直接拿到目标对象,应该改成从require('core')返回的对象里解构:
const { globals } = require('core');
这样就和const globals = require('core').globals;效果完全一致了。
内容的提问来源于stack exchange,提问作者shamon shamsudeen
相关产品推荐
相关产品推荐

