我正在制作一个数学库,因为 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]
但事实并非如此
???
最佳答案
发生这种情况是因为 part1
和 part2
(显然还有 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/