能否在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
相关产品推荐
相关产品推荐

