使用module.exports导出checkNested时为何报not a function错误?
问题原因分析
你目前使用的是 CommonJS 规范的命名导出语法,错误是导入方式不匹配导致的:当你使用 module.exports.checkNested = checkNested 导出时,导出的整体是一个结构为 { checkNested: 你的函数 } 的对象,如果导入时直接用 const checkNested = require('xxx') 拿到的是这个对象而非函数,调用时就会抛出checkNested is not a function错误。
对应解决方案
- 方案1:导入时解构导出对象
你现在的导出逻辑不需要改动,导入时用解构语法取出对应方法即可:
// 替换为你实际的模块文件路径 const { checkNested } = require('./你的模块文件名'); // 后续可正常调用 checkNested 方法
- 方案2:修改为默认导出
如果你的模块仅需要导出checkNested这一个方法,可以把导出逻辑修改为默认导出:
// 模块内的导出代码改为如下 module.exports = checkNested;
导入时直接赋值即可:
const checkNested = require('./你的模块文件名');
额外优化建议
你的递归方法目前缺少 null 边界判断,如果传入的属性链中间值为 null,会抛出 TypeError 错误,可做如下优化:
function checkNested(obj, level, ...rest) { if (obj === undefined || obj === null) return false; // 用 Object 原型方法调用更安全,避免目标对象改写了 hasOwnProperty 方法 if (rest.length == 0 && Object.prototype.hasOwnProperty.call(obj, level)) return true; return checkNested(obj[level], ...rest); }
内容的提问来源于stack exchange,提问作者Sandra Schlichting
相关产品推荐
相关产品推荐

