首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么同一个对象会有两个不同的值,这取决于访问的方式?

为什么同一个对象会有两个不同的值,这取决于访问的方式?
EN

Stack Overflow用户
提问于 2020-05-02 16:55:20
回答 1查看 25关注 0票数 0

我有以下方法:

代码语言:javascript
复制
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字符串为

代码语言:javascript
复制
"{"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应该在屏幕截图中带下划线的部分输出相同的字符串。

EN

回答 1

Stack Overflow用户

发布于 2020-05-02 17:32:11

奇怪的行为并不在JS这一端。Edge/Chrome控制台(至少)在执行console.log()时实际上不会按原样打印对象。您在控制台中看到的是对对象的“引用”。如果在console.log()之后、在控制台中展开对象之前对对象进行了修改,您将看到修改后的版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61556761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档