很简单的例子:
var a = { id: 5 };
var b = { id: 6 };
var c = { id: 7 };
var arr = [a, b, c];
现在我有一个功能:
function remove(startIndex) {
// set objects to null from startIndex in array
}
如果我试试这个:
arr[0] = null;
然后我有:
arr[0] == null // true
a == null // false (i need true)
所以,我的问题是,如何访问对象抛出任何集合(数组或对象)并更改它?
我不想写这样的东西:
function remove(startIndex) {
if(startIndex == 0) {
a = null;
b = null;
c = null;
}
if(startIndex == 1) {
b = null;
c = null;
}
if(startIndex == 2) {
c = null;
}
}
这样写起来容易得多(但它不起作用):
function remove(startIndex) {
for(var i = startIndex; i<arr.length; i++) arr[i] = null;
}
答案 0 :(得分:4)
我不知道你正在编写的这段代码到底是什么,但这里是Javascript的工作原理:
每次使用值实例化变量时,请说出像{ id: 10 }
这样的对象。该对象存储在内存中,引用将返回到您的变量,比如您将其命名为a
。
现在,如果您说var b = a;
,现在将相同的引用传递给变量b
。现在Javascript运行时知道你有两个引用对象{ id: 10 }
的变量。
您现在不再希望保留变量b
,因此您需要编写b = null;
。您认为该对象已被删除,但Javascript运行时知道对象{ id: 10 }
具有一个引用 - 即变量a
- 引用它。因此它不会从内存中删除{ id: 10 }
。
但是,如果你也写a = null;
,那么有 Zero 引用,Javascript运行时的Garbage Collector最终会从内存中删除对象。
所有这一切都是为了让你明白,如果没有进一步的内务管理,你将无法达到你希望的目标。
如果您真的希望a, b, c
为null
,则必须编写一些明确将其值设置为null
的代码。与数组更改时的a = arr[0]; b = arr[1]; c = arr[2];
类似。你可以eval
语句并做一些字符串模板,不用手写等变量,然后从中做出一个循环,但如果你只有三个变量那就不值得。
希望这有帮助。
答案 1 :(得分:2)
JavaScript没有指针,所以以原始方式实现你想要的东西是行不通的。
除了arr[0] = null
之外,您也可以尝试直接将a
设置为null
。