gpt4 book ai didi

javascript - 使用带有空输入 js 的 shift

转载 作者:行者123 更新时间:2023-12-03 02:44:45 24 4
gpt4 key购买 nike

我有一个关于使用 .shift 方法的基本问题。下面是我将数字转换为所有数字之和的工作代码。转换为字符串并拆分为数组后,如果第一个值是“-”符号,我使用 .shift 删除该元素,然后将下一个值设置为负值。我的问题是,“-”去哪里了?我没有分配给任何变量的这个值会发生什么?

展望 future ,如果使用此方法可能会使值在我的代码中“ float ”,我是否应该担心?

function sumDigits(num) {
var numArr = num.toString().split('');
if (numArr[0] === '-') {
numArr.shift();
numArr[0] *= -1;
}
var total = numArr.map(Number).reduce(function(a, b) {
return a + b;
});
return total;}

谢谢!

最佳答案

由于 Javascript 中的数组是可变的,因此数组中的每个元素都是对内存中某个位置的引用。当您创建新数组或向数组添加元素时,Javascript 会隐式分配内存,然后从数组创建新引用以指向内存中新分配的对象。

在您的情况下,当您 shift() 时,您将删除对包含该元素的内存的引用,而不是元素本身。

那么 Javascript 是如何从内存中删除这些项目的呢?垃圾收集。垃圾收集的一种简单机制会检查内存中的所有对象并计算对其的引用数量。如果引用数为0,则向垃圾收集器表明该对象可以从内存中删除。

因此,当您使用 shift() 删除对数组中第一个元素的引用时,垃圾收集器稍后会介入并发现数组中第一个元素曾经指向的对象到目前为止还没有任何内容引用它。因此,垃圾收集是安全的,因此可以从内存中释放。

总而言之,由于 Javascript 的垃圾收集机制,您无需担心使用 shift() 导致的内存泄漏。

这是一个有趣的 link如果您想了解更多信息,请参阅有关 Javascript 内存管理的信息。

关于javascript - 使用带有空输入 js 的 shift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48143221/

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