Object.prototype在Node中返回空对象

Shi*_*ick 16 javascript object node.js

当我Object.prototype在浏览器控制台中执行时,我获得了所有可用的属性和方法Object.prototype.这是预期的,但当我在NodeJS终端执行完全相同的东西时,我得到一个空对象{}.有人可以解释一下为什么会这样吗?我附上了两者的截图.

浏览器

终奌站

amr*_*ngh 15

这是因为节点中的console.log()使用util.inspect(),它在对象上使用Object.keys(),并且它仅返回可枚举属性.并Object.prototype 包含不可枚举的属性,这就是它返回空节点的原因.

当我们console.log(Object.prototype)记录一个空的时,可以在下面的代码片段中观察到类似的行为{};

console.log(Object.prototype);
Run Code Online (Sandbox Code Playgroud)

但是当我们在其中明确定义一个可枚举属性时,Object.prototype会记录一个包含该属性的对象:

Object.defineProperty(Object.prototype, 'property1', {
  value: 42,
  enumerable : true
});
console.log(Object.prototype)
Run Code Online (Sandbox Code Playgroud)

参考

  • 我想补充一点,对于检查器(调试器、控制台等)应该如何显示内容没有达成一致的标准,因此不同的环境选择略有不同的实现。 (2认同)

Rai*_*inb 7

顺便说一下,Object.getOwnPropertyNames如果您想知道或访问这些属性,可以使用.

> Object.getOwnPropertyNames(Object.prototype)
[ 'hasOwnProperty',
  'constructor',
  'toString',
  'toLocaleString',
  'valueOf',
  'isPrototypeOf',
  'propertyIsEnumerable',
  '__defineGetter__',
  '__lookupGetter__',
  '__defineSetter__',
  '__lookupSetter__',
  '__proto__' ]
Run Code Online (Sandbox Code Playgroud)

它不会列出您可能在chrome dev控制台中找到的其他属性,例如作用域或promises的值.但它足够好了!