var userID = 1;
var users = [1, 2, 3];

console.log(users + " initial users array");

testFunction();

function testFunction() {
    var usersWithoutMe = users; // altering usersWithoutMe alters users from now on
    var index = usersWithoutMe.indexOf(userID);
    if (index != -1) {
      usersWithoutMe.splice(index, 1);
    }
    console.log(usersWithoutMe + " new users array without my own id");

}

console.log(users + " initial users array got altered");


如何防止这种情况发生,为什么要这样做呢?

注意:我通过执行以下操作来修复它:var usersWithoutMe = users.slice(0);而不是仅仅var usersWithoutMe = users,它也修复了它,但是我仍然想了解为什么它最初不起作用...

最佳答案

这是因为您正在修改相同的数组。你的线

// altering usersWithoutMe alters users from now on
var usersWithoutMe = users;


从您理解的意义上来说是不正确的。现在,usersWithoutMe指向与users变量相同的数组。然后你的行:

usersWithoutMe.splice(index, 1);


正在更改数组。由于两个都指向同一个基础数组,因此可以看到两个变量的变化。

如果要分配副本,可以使用slice

var usersWithoutMe = users.slice(0)

07-28 10:51