Object.prototype在Node中返回空对象

时间:2018-07-08 16:06:43

标签: javascript node.js object

在浏览器控制台中执行Object.prototype时,我将获得Object.prototype内部所有可用的属性和方法。这符合预期,但是当我在NodeJS终端中执行完全相同的操作时,我得到的是空对象{}。谁能解释一下为什么会这样?我已经附上了两者的屏幕截图。

Browser

Terminal

2 个答案:

答案 0 :(得分:14)

这是因为节点中的console.log()使用util.inspect(),该对象在对象上使用Object.keys(),并且仅返回可枚举的属性。并且.schedule-content { position: relative; display: block; opacity: 0; height: 0; overflow: hidden; visibility: hidden; -webkit-transition: 0.3s; -o-transition: 0.3s; transition: 0.3s; } .schedule-content.active { opacity: 1; height: auto; visibility: visible; overflow: visible; } 包含不可枚举的属性,这就是为什么它返回空节点的原因。

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

{}

但是,当我们在console.log(Object.prototype);中显式定义一个可枚举的属性时,它将记录一个包含该属性的对象:

Object.prototype

对于Reference

答案 1 :(得分:7)

如果您想了解或访问这些属性,可以使用Object.getOwnPropertyNames

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

它不会列出您可能在chrome开发者控制台中找到的其他属性,例如范围或promises的值。但这已经足够了!