如何在JavaScript中列出全局根对象?
问题原因与解决方案
为什么window相关方法找不到你的全局变量/类?
- 用
function example() {}这类方式声明的全局函数,会自动挂载为window对象的属性,所以能通过Object.getOwnPropertyNames(window)这类方法找到。 - 但
const、let声明的变量,以及class声明的类,在全局作用域下不会被添加到window对象中——它们属于ES6新增的全局环境绑定,和传统的全局属性是两个不同的体系。
怎么获取这些全局绑定?
- 直接使用
globalThis对象(它是ES2020引入的标准全局对象,浏览器环境下等价于window,但能覆盖所有全局绑定),用以下代码:
或者:Reflect.ownKeys(globalThis).join(' ')
这两个方法能返回所有全局环境中的绑定,包括你用Object.getOwnPropertyNames(globalThis).join(' ')const/let/class声明的内容。 - 如果你需要筛选出自定义的全局项,可以在脚本执行前先保存一份
globalThis的属性列表,执行后再对比,过滤掉环境自带的属性。
内容的提问来源于stack exchange,提问作者agiopnl
相关产品推荐
相关产品推荐

