gpt4 book ai didi

javascript - 变量、数组和 for 循环未按应有的方式运行

转载 作者:行者123 更新时间:2023-11-30 12:31:15 24 4
gpt4 key购买 nike

我正在制作一个数学库,因为 0.1 + 0.2 不 = 0.30000000000004。但是我遇到了一个非常奇怪的问题

我有一个数组:

var array = [1,2,3,".",4,5,6];

我想把它分成两部分,所以我...

var part1 = array;
var part2 = array;

然后……

for (var i = 4; i < 7; i++) {
part1[i] = 0;
};

所以现在第 1 部分 =

[1,2,3,".",0,0,0]

本应如此,但后来我遇到了这个问题。在我...

for (i = 2; i > -1; i--) {
part2[i] = 0;
};

第 1 部分、第 2 部分和数组现在 =

[0,0,0,".",0,0,0]

这不应该发生,part2应该=

[0,0,0,".",4,5,6]

但事实并非如此

???

最佳答案

发生这种情况是因为 part1part2(显然还有 array)变量都指向相同的内存地址,该地址存储相同的内容信息,因此如果您编辑三个数组中的任何一个,更改将在所有数组中可见,因为您正在修改由三个不同变量表示的相同值。

要避免这种情况,您应该使用 slice() 或其他方式(例如 for 循环)“复制”数组,但 slice 是我最喜欢的方法,也是输入速度最快,因此您的代码将变为:

var part1 = array.slice();
var part2 = array.slice();

现在你可以做任何你想做的事,数组将被视为不同的变量。

简单示例:

a = [1,2]
> [1, 2]
b = a.slice()
> [1, 2]
b[0] = 2
2
b
> [2, 2]
a
> [1, 2]

复制数组的最快方法:

如果您正在寻找 fastet 方法(因为有几种不同的方法可以复制数组),那么您应该检查 this benchmark test ,并运行测试。最好的解决方案并不总是相同的,所以在未来它可能会改变,这取决于 JS 实现和您当前的浏览器版本,尽管 slice(), slice(0)concat() 通常比其他方法快得多。

关于javascript - 变量、数组和 for 循环未按应有的方式运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27636547/

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