数组variables修改node.js
我不明白为什么我的variables改变
if(chat.users[i + 1]) console.log("1: " + chat.users[i + 1].username); if(save[i+1]) console.log("2: " + save[i + 1].username); chat.users[i + 1] = save[i]; if(chat.users[i + 1]) console.log("3: " + chat.users[i + 1].username); if(save[i+1]) console.log("4: " + save[i + 1].username);
我有
1: test1 2: test1 3: test 4: test
我不明白为什么我没有
1: test1 2: test1 3: test 4: test1
谢谢
编辑:所有的代码在那里
http://codepaste.net/gi5ghf (第92行)
现在你的代码很清楚! 让我们来看看它
var chat = { users: [ { username: "test" }, { username: "test1" } ] }, // creating reference from save to chat.users save = chat.users, i = 0; if (chat.users[i + 1]) { // should be chat.users[1].username ("test1") console.log("1: " + chat.users[i + 1].username); // output "test1" } if (save[i + 1]) { // should be save[1].username ("test1") console.log("2: " + save[i + 1].username); // output "test1" } /* * creating reference * so chat.users[i + 1] is now save[i] ({ username: "test" }) * and because save is reference of chat.users, save[i + 1] is now also now save[i] ({ username: "test" }) */ chat.users[i + 1] = save[i]; if (chat.users[i + 1]) { // should be chat.users[1].username ("test") console.log("3: " + chat.users[i + 1].username); // output "test" } if (save[i + 1]) { // should be chat.users[0].username ("test") console.log("4: " + save[i].username); // output "test" }
什么?
让我再向你解释一下。 例如,你有这样的:
var a = [1, 2];
现在你写这个:
var b = a;
也许你想复制一个B,但你只是创build一个参考!
所以看看这个:
console.log(a, b); //=> [1, 2] [1, 2] a[0] = 3; console.log(a, b); //=> [3, 2] [3, 2] b[0] = 4; console.log(a, b); //=> [4, 2] [4, 2]
所以如果你改变一个对象或数组的值,它也会被改变,因为它只是一个引用,而且它们都有相同的内存地址。
如果你真的想克隆/复制对象/数组,然后看看这个问题 。
保存[我]似乎是一个用户名为“testing”的用户。 您正在将此用户分配给chat.users [i + 1]:
chat.users[i + 1] = save[i];
然后你打印出它的用户名:
if(chat.users[i + 1]) console.log("3: "+chat.users[i + 1].username);
最后,你正在打印保存[我]的用户名:
if(save[i+1]) console.log("4: "+save[i].username);
它打印出'testing',因为这是保存[我]的用户名是。
也许你的意思是最后一行打印出保存[i + 1]的用户名,而不是保存[i]的用户名? 保存[i + 1]的用户名是'test1'。