代码之家  ›  专栏  ›  技术社区  ›  Paul

当与ejs对象组合时,奇怪的Javascript行为

  •  0
  • Paul  · 技术社区  · 2 年前

    我目前正在开发一个小型帐户系统,我想在概览网络面板中显示用户数据。在auth之后,用户对象与ejs文件一起直接传递到客户端。 当通过ejs语句直接访问用户对象时,一切都很正常。它也可以在以下行之后用Javascript打印:

    <script> 
    const user = JSON.stringify(<%- JSON.stringify(user) %>);            
    console.log(user); 
    </script>
    

    我现在也可以在我的js文件中打印这个对象。但是,我无法访问对象的某些变量。 我有这个功能可以在面板上显示某些信息:

    function displayUserInfo() {
        console.log("User:" + user);
        console.log("Username:" + user.username);
        document.getElementById('profilePic').src = user.image;
        document.getElementById('usernameInput').value = user.username;
        document.getElementById('emailInput').value = user.email;
        document.getElementById('displaynameInput').value = user.displayname;
    }
    

    此代码在控制台中的输出如下:

    User:{"id":3,"username":"test@test","email":"test@test","image":null,"created_at":"1718643827967.0","salt":undefined,"password":undefined}
    Username: undefined
    

    此外,我试图用这个函数修改的所有值都设置为未定义。

    我试着等待网站完成加载,然后调用函数,但无济于事。我不明白为什么会发生这种情况,因为我可以在一行上访问同一个对象,一行之后它似乎消失了。

    1 回复  |  直到 2 年前
        1
  •  0
  •   Barmar    2 年前

    您正在通过外部调用将对象转换为字符串 JSON.stringify() 使用

    const user = <%- JSON.stringify(user) %>;  
    

    请注意,您不能将字符串和对象连接起来,因此在执行此操作时应该字符串化。

    console.log("User:" + JSON.stringify(user));
    
    推荐文章