有时在我的项目中,当我将值记录到控制台时,我使用JSON.Stringify
来读取数据,有时我不需要这样做...我想知道为什么?
在这个例子中:
this._productServices.getAll().do(data => console.log(data)).subscribe(products=> this.articles= products);
当我看到控制台时,有这样的值:
(4) [{…}, {…}, {…}, {…}]
Acctualy有可读数组值。
但在这种情况下:
filteredSubProducts: Group[];
filterSubProductsByIdId(Id) {
this.filteredSubProducts= this.articles.filter(item => item.parentId == Id);
console.log("Products array" + this.filteredSubProducts);
}
我得到的结果为:
Products array[object Object],[object Object]
所以我需要在几秒钟内使用JSON.stringify()
来获取我的值[object Object],[object Object]
可读...我想知道为什么会这样?有时候我正在使用它,有时候我不是......
由于
答案 0 :(得分:6)
您收到它是因为您要向字符"Products array"
添加字符串filteredSubProducts
。
所以代码实际上在做
console.log("Products array" + this.filteredSubProducts.toString());
toString()方法导致[object Object]。
解决方法是不连接,但在console.log语句中使用逗号
console.log("Products array", this.filteredSubProducts)
现在它允许您在不使用JSON.stringify()
的情况下显示它现在JSON.stringify()的优点在于它会在那时为您提供快照。有时您更改数组,对象并在控制台中显示为错误值对延迟评估。 stringify会导致它被评估,并在那个时刻看到它。
答案 1 :(得分:1)
因为如果您尝试使用字符串放置对象,Chrome将无法解析内容。如果你需要"说"在将对象或数组写入控制台之前,您需要在两个console
命令中执行此操作或添加逗号
var myArray = [{content:"hola"}, {content:"hello"},{content:"hallo"}];
console.log("This does not work " + myArray);
console.log("This will work just ok");
console.log(myArray);
console.log("this works too" , myArray);
答案 2 :(得分:0)
如果您在服务中将响应转换为JSON,则必须在要使用该响应时进行字符串化。
res => res.json()
//在这种情况下,您需要使用stringify
答案 3 :(得分:0)
这是因为您将一个字符串"Products array"
与一个带有.toString()
的对象连接在一起 - 另一个字符串。你在控制台看到的是字符串。否则记录整个对象。尝试
console.log("Products array", this.filteredSubProducts);
编辑:只删除toString()
并不起作用,因为"string" + ...
之后的所有内容都会先转换为字符串。
// does not work
console.log("Products array" + this.filteredSubProducts);
此行为称为类型强制,您可以在this SO answer,this article或只是谷歌google it for more info
中阅读相关内容答案 4 :(得分:0)
console.log()
仅适用于嵌套的第二级,例如,如果我运行console.log({}, {}, {})
,则数组中的所有对象都将显示而不进行任何混淆,但是如果我尝试记录
console.log([
{},
{},
{a: {
a: {
a: {}
}
}}
])
结果类似于[ {}, {}, { a: { a: [Object] } } ]
您仍然可以通过在任何体面的浏览器控制台中扩展它们来查看对象,但是终端没有该设施,因此为了查看嵌套项,我们使用JSON.stringify()
将对象及其子项转换为字符串然后可以轻松打印,但你可能已经注意到它们以这种方式松开了它们的缩进,因为你基本上是在打印一个字符串。