You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在JavaScript中列出所有标识符?类比Python dir()及Node.js尝试遇阻

在JavaScript中实现类似Python dir()的功能

JS里没法像Python的dir()那样实现统一的全局枚举功能,得根据运行环境(浏览器/Node.js)分别处理,先解决你遇到的报错问题:

你用的Object.keys(require('module')._cache)是Node.js专属的私有API,在浏览器环境里根本不存在require和module对象,所以才会报require is not defined错误。下面分场景说明正确的实现方式:

Node.js环境

1. 查看已加载的模块

不要用下划线开头的私有API(这类API无官方保障,可能随Node版本变更),直接用官方暴露的require.cache:

// 列出所有已加载模块的文件路径
console.log(Object.keys(require.cache));

2. 查看当前作用域的可访问变量

  • 全局作用域:Node.js的全局对象是global,枚举全局变量用:
    console.log(Object.keys(global));
    
  • 函数/局部作用域:JS的词法作用域不允许直接枚举局部变量(局部变量不是对象属性),如果要查看当前作用域的变量,只能手动将变量包装成对象打印:
    function test() {
      const a = 1;
      let b = 'hello';
      // 打印当前作用域的变量
      console.log({a, b});
    }
    test();
    

浏览器环境

1. 查看全局可访问的变量

浏览器的全局对象是window,枚举全局变量和已加载的全局模块用:

console.log(Object.keys(window));

2. 查看当前作用域的可访问变量

  • 函数/局部作用域:同样无法直接枚举,推荐用浏览器开发者工具的Sources面板,在代码断点处查看Scope栏的Local变量(这是最便捷的方式);也可以手动包装变量打印:
    function test() {
      const x = 2;
      let y = 'world';
      console.log({x, y});
    }
    test();
    
  • ES模块场景:浏览器中使用import/export的模块,内部变量是模块私有,无法从外部枚举,只能在模块内部打印或通过调试工具查看。

内容的提问来源于stack exchange,提问作者Fachu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 23:01:11