gpt4 book ai didi

javascript - 访问对象并将其设置为 null throw 数组元素

转载 作者:行者123 更新时间:2023-11-29 16:14:37 25 4
gpt4 key购买 nike

非常简单的例子:

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;
}

最佳答案

我不知道您编写这段代码的确切目的是什么,但 Javascript 的工作原理如下:

每次你用一个值实例化一个变量时,说一个像 { id: 10 } 这样的对象。该对象存储在内存中,引用 返回给您的变量,假设您将其命名为 a

现在,如果您说 var b = a;,则相同的引用现在会传递给变量 b。现在 Javascript 运行时知道您有两个变量引用对象 { id: 10 }

您现在不想保留变量 b,因此您编写 b = null;。您认为对象已被删除,但 Javascript 运行时知道对象 { id: 10 } 一个 引用——即变量 a - - 引用它。所以它不会从内存中删除 { id: 10 }

但是,如果您还编写 a = null;,则存在 引用,并且 Javascript 运行时的 Garbage Collector最终会从内存中删除对象。

所有这一切都是为了让你明白,如果没有进一步的内务管理,你将无法实现你希望做的事情。

如果您真的希望a, b, cnull,您将不得不编写一些代码将它们的值显式设置为null 也是。像 a = arr[0]; b = arr[1]; c = arr[2]; 每当数组改变时。您可以eval 语句并进行一些字符串模板化以不手动编写变量等,然后从中创建一个循环,但如果您只有三个变量,那是不值得的。

希望这对您有所帮助。

关于javascript - 访问对象并将其设置为 null throw 数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18782474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com