Javascript JSON.stringify firebase对象后缺少数据

Javascript JSON.stringify firebase对象后缺少数据,javascript,firebase,firebase-authentication,Javascript,Firebase,Firebase Authentication,我有一个链接到firebase的应用程序。当用户登录时,我将他的对象firebase.auth().currentUser分配给一个变量。然后,我向该变量添加一个属性(username)。问题是,当我console.log(currentUser)时,我得到了带有添加属性的对象。但是,当我尝试JSON.stringify它,然后再JSON.parse它(我这样做是为了将它存储在localStorage)时,我找不到我添加的属性username。这里发生了什么事 var currentUser=f

我有一个链接到firebase的应用程序。当用户登录时,我将他的对象
firebase.auth().currentUser
分配给一个变量。然后,我向该变量添加一个属性(
username
)。问题是,当我
console.log(currentUser)
时,我得到了带有添加属性的对象。但是,当我尝试
JSON.stringify
它,然后再
JSON.parse
它(我这样做是为了将它存储在
localStorage
)时,我找不到我添加的属性
username
。这里发生了什么事

var currentUser=firebase.auth().currentUser
currentUser.username='Foo';
console.log(currentUser)/=>我在这里获得我的道具用户名
console.log(JSON.parse(JSON.stringify(currentUser))/=>我在这里找不到我添加的道具

currentUser
不是一个普通对象,它是的一个实例。如您所见,它实现了一个
toJSON()
方法,该方法由
JSON.stringify
自动检测并使用,作为将对象转换为JSON的规范方法

如果要将自定义属性合并到Firebase用户上,可以先添加
toJSON()

var currentUser = firebase.auth().currentUser.toJSON();

这将把用户对象转换成一个普通对象,这样就可以添加额外的属性,并且仍然按照预期进行序列化。但是,请注意,无论是服务器端还是
firebase.auth().currentUser

用户上,这显然都不会持久存在。其结果是:
console.log(localStorage.getItem('currentUser'))
控制台中的对象是活动的(不是快照),并且在记录之后会显示对它们所做的修改。尝试
console.log(JSON.stringify(currentUser))
可能会看到它是空对象,并且具有同步性issue@AbderrahimSoubaiElidrissi显然,JSON格式的相同对象请包含一个最小的复制,以便我们提供可靠的建议。请参阅和,以获取有关提出有效问题和获得超级明星答案的一些重要提示。由于您正在获取Firebase管理和修改的对象,它可能会覆盖您的更改。将需要的数据复制到您自己的对象中。还有,重点是什么?为什么要将Firebase提供的短暂/可变数据存储在localStorage中?提示:它已经存储在那里了。也许只是单独存储用户名?@charlietfl-true,我如何修复它?非常感谢你,@Michael Bleigh!你无法想象我花了多少时间寻找这个答案!在Angular上,如果您(用户$| async),则会在HTML上打印“plain”对象。但每次我试图在TS上操纵它。。。错误被抛出!使用
toJSON()
您只能获得“好”的特性-易于操作且没有错误!德克萨斯州!