vue中用console.log打印对象的各个属性值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue中用console.log打印对象的各个属性值相关的知识,希望对你有一定的参考价值。

参考技术A vue中用console.log打印对象时,直接打印对象显示如user:[object Object],使用console.log(JSON.stringify(user)),能把对象中的各个属性以json格式输出,方便调试。

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

【中文标题】打印对象时,console.log 如何确定要打印的属性?【英文标题】:How does console.log determines what properties to print when printing an object? 【发布时间】:2019-05-04 21:21:15 【问题描述】:

我有一个 mongodb 数据库,我正在使用 mongoose 和 nodejs。当我控制台一个 mongoose 对象时,我得到了我在我的模式中定义的常用键。

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

*/

但是当我尝试使用 Object.keys() 来控制它的键时,它会打印 5 个键,这些键并不是我的架构的一部分,并且必须由 mongoose 在内部用于各种操作。

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

我的问题是,console.log 如何确定要打印的对象的哪一部分?当直接记录对象时,它如何通过这些键和它们的值来确定要打印的内容?

是否有一个类定义的类似 toString() 的函数来描述对象的 JSON 表示?然后由 console.log 用来实际打印的东西。

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

【问题讨论】:

据我所知 javascript 行为,“mongooseObject”可能有一个自定义的 toString 函数。 【参考方案1】:

Mongoose Object 是一个非常复杂的对象,里面有很多功能。 如果您只想将对象转换为纯 mongo json 文档可以使用toJSON() 函数,那么您可以轻松使用.keys

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

【讨论】:

【参考方案2】:

我不认为这是控制台打印的键与当时对象中的键不同。您第一次正确打印反对的原因是因为您传递的对象 console.log 在您查看它的那一刻被读取,但是如果您要记录 JSON.parse(JSON.stringify(mongooseObject)) 您可能会意识到该对象当时是空的

Object.keys 返回不同结果的原因是,它会在调用该对象的那一刻用该对象中的键创建一个数组。

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

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

【讨论】:

【参考方案3】:

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

console.log 实际上不是 Ecmascript 语言标准的一部分。虽然有 WhatWG standard for the console API,但根本不需要 JavaScript 实现来实现它(尽管 AFAIK 都这样做),即使在那个标准部分中,也是明确实现定义的。

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

【讨论】:

以上是关于vue中用console.log打印对象的各个属性值的主要内容,如果未能解决你的问题,请参考以下文章

js中用for循环获取对象的变量

ES6中用&&与||来简化if{}else{}写法

console.log()与console.dir()

javascript如何去除对象的某个属性

【占坑】关于console.log不能展开对象属性的问题

js 清空对象删除对象的属性