javascript 列出Node.js中的所有全局变量

4urapxun  于 2023-01-11  发布在  Java
关注(0)|答案(3)|浏览(163)

我试图列出所有的全局变量,包括那些引用built-in objects的变量。
在Chrome的控制台上,我可以简单地输入this,然后取回所有的键,包括StringNumber等。
然而,当我在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从何而来?

gojuced7

gojuced71#

全局对象的内置属性是不可枚举的,所以Object.keys不会返回它们,你可以使用Object.getOwnPropertyNames

xeufq47z

xeufq47z2#

下面的globals()函数将获取全局名称空间对象:

function globals() { return this; }

有了它,你可以随时列出全局名称空间的所有变量:

function varsList() {
  return Object.getOwnPropertyNames(globals());
}

更新:
在现代浏览器中,您可以使用 * globalThis * namespace对象来保存全局名称空间的变量:

function globalVarsList() {
  return Object.getOwnPropertyNames(globalThis);
}

for(const name of globalVarsList()) {
   console.log(name); 
}

这也可以在严格模式下工作。

gupuwyp2

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

相关问题