console.log如何确定打印对象时要打印的属性?

时间:2018-12-03 14:49:10

标签: javascript node.js json mongoose console.log

我有一个mongodb数据库,并且我在nodejs中使用了mongoose。当我操纵一个猫鼬对象时,我会得到在架构中定义的常用键。

console.log(mongooseObject); 
/*
{ 
  _id: 5b8b7d627defb42e3f6349ef,
  name: 'John Doe',
}
*/

但是当我尝试使用Object.keys()控制台它的键时,它会打印出5个键,这些键并不是我的架构的真正组成部分,必须由猫鼬在内部进行各种操作。

console.log(Object.keys(mongooseObject)) // [ '$__', 'isNew', 'errors', '_doc', '$init' ]

我的问题是,console.log如何确定要打印的对象的哪一部分?当直接记录对象时,它如何工作并抛出这些键及其值以确定要打印的内容?

是否存在类定义的toString()函数,该函数描述对象的JSON表示形式?然后console.log使用它来实际打印。

编辑:我得到了很多与猫鼬相关的解决方案,建议我使用.toJSON()和.toObject()。也许我应该说清楚,我并不是真的在寻找猫鼬相关的东西。我只是用它作为示例,因为这就是我注意到这种特殊行为的方式。我只是对javascript在这里如何工作感兴趣。而且我可以编写一个Class来描述如何实例化从其实例化的对象吗?

3 个答案:

答案 0 :(得分:1)

猫鼬对象是一个非常复杂的对象,内部具有许多功能。 如果您只想将对象转换为纯mongo json文档,则可以使用toJSON()函数,然后可以轻松使用.keys

 console.log(Object.keys(mongooseObject.toJSON()))

答案 1 :(得分:0)

我认为这不是控制台打印的键与当时对象中的键不同的键。第一次正确打印对象的原因是因为您通过console.log的对象正在阅读的那一刻被读取,但是如果要登录JSON.parse(JSON.stringify(mongooseObject)),则可能会遇到实现当时对象为空

Object.keys返回不同结果的原因是因为它将在调用该对象时从该对象的键中创建一个数组。

理想情况下,您只需要等待对象实际存在,然后再打印其键即可。为了帮助您,我们将需要更多代码。

对象之所以会产生这种行为,是因为它们是通过引用传递的,请阅读this stackoverflow帖子,以获取有关其含义的出色信息。

答案 2 :(得分:0)

它可以打印任何想要的东西。

console.log实际上不是Ecmascript语言标准的一部分。尽管有WhatWG standard for the console API,但完全不需要JavaScript实现(尽管AFAIK都需要),甚至在标准部分中也明确定义了实现。

所以简短的答案是没有答案。更长的答案是,几乎可以肯定,它会打印键,可能会打印[[class]]之类的内部插槽,等等,但这将很大程度上取决于您传入的实际对象。

相关问题