在jquery中将一个object赋值给一个新的变量,操作新的变量,为何这个object也会被改变?

                onlineUsers[userData.userID] = userData;
                console.log(onlineUsers);
                var userDataHasMes = userData;
                userDataHasMes['message'] = new Array();
                userContentList[userData.userID] = userDataHasMes;
                //在线人数+1
                onlineCount++;
                console.log(onlineUsers);

userData是一个Object类型的变量,为何我将其赋值给userDataHasMes,对userDataHasMes进行改动,最后userData也会有变动啊??(onlineUsers里只存了useData单操作userDataHasMes时onlineUsers里也会变。。。)无语了

阅读 5.9k
4 个回答

对象的引用的是地址,不是变量。想要不影响,就将对象复制一遍。这应该算是js里面的基础知识。把权威指南看一遍,你就能知道原因了。话说,我踩过这样的坑,两天才爬出来。。。

因为对象是引用传递的。

好像是要涉及到对象克隆的问题

对象的赋值实际上是把两个变量指向同一个地址,如果想要赋一个拷贝的对象,可以使用以下函数

function clone(obj)
{
    var o,i,j,k;
    if(typeof(obj)!="object" || obj===null)return obj;
    if(obj instanceof(Array))
    {
        o=[];
        i=0;j=obj.length;
        for(;i<j;i++)
        {
            if(typeof(obj[i])=="object" && obj[i]!=null)
            {
                o[i]=arguments.callee(obj[i]);
            }
            else
            {
                o[i]=obj[i];
            }
        }
    }
    else
    {
        o={};
        for(i in obj)
        {
            if(typeof(obj[i])=="object" && obj[i]!=null)
            {
                o[i]=arguments.callee(obj[i]);
            }
            else
            {
                o[i]=obj[i];
            }
        }
    }

    return o;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进