我有以下方法:
unpackMessage(message : any) : BuiltMessage {
let msg :BuiltMessage = new BuiltMessage(message['title'],message['scaffold'],{});
let vals = JSON.parse(message['fieldValues']);
Object.keys(vals).forEach(
field =>{
if(msg.scaffold.fieldTypes[field].type == "message"){
let arr :BuiltMessage[] =[];
vals[field].forEach(val => arr.push(this.unpackMessage(val)));
msg.fieldValues[field] = arr;
}
else{
msg.fieldValues[field] =vals[field];
console.log(msg,msg.fieldValues[field]);
}
}
)
return msg;
}通过"message“参数调用,形式为JSON.parse(jsonString),其中json字符串为
"{"version":1,"id":"565ac322-2eb7-423c-83fd-ce6ef09fd7e2","project":"7c5c1ad4-81c2-f8e5-504f-803605946168","title":"","scaffold":{"messageType":"TextMessage","fieldTypes":{"message":{"type":"text","args":[],"multiple":false}},"icon":"message"},"fieldValues":"{\"message\":[\"This is a test message\"]}"}"现在的问题是控制台日志的输出是:

我怎样才能避免这样的行为呢?或者我的代码如何触发这样的行为?
显然,想要的行为是打印整个对象,并且只有msg.fieldValuesfield应该在屏幕截图中带下划线的部分输出相同的字符串。
发布于 2020-05-02 17:32:11
奇怪的行为并不在JS这一端。Edge/Chrome控制台(至少)在执行console.log()时实际上不会按原样打印对象。您在控制台中看到的是对对象的“引用”。如果在console.log()之后、在控制台中展开对象之前对对象进行了修改,您将看到修改后的版本。
https://stackoverflow.com/questions/61556761
复制相似问题