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)