我试图列出所有的全局变量,包括那些引用built-in objects的变量。
在Chrome的控制台上,我可以简单地输入this
,然后取回所有的键,包括String
、Number
等。
然而,当我在Node.js中这样做时,我得到的要少得多:
> Object.keys(this)
[ 'global',
'process',
'GLOBAL',
'root',
'Buffer',
'setTimeout',
'setInterval',
'clearTimeout',
'clearInterval',
'setImmediate',
'clearImmediate',
'console',
'module',
'require',
'_' ]
> this.eval
[Function: eval]
this.eval
从何而来?
3条答案
按热度按时间gojuced71#
全局对象的内置属性是不可枚举的,所以
Object.keys
不会返回它们,你可以使用Object.getOwnPropertyNames
。xeufq47z2#
下面的
globals()
函数将获取全局名称空间对象:有了它,你可以随时列出全局名称空间的所有变量:
更新:
在现代浏览器中,您可以使用 * globalThis * namespace对象来保存全局名称空间的变量:
这也可以在严格模式下工作。
gupuwyp23#
你可以使用
[Object.getOwnPropertyNames(this)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames)
,因为如果不把“this”作为参数传递给Object所有者的属性,getOwnPropertyNames()函数将不会返回任何结果。关于评估来自何处的问题,请查看此链接。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval