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

标签 javascript

我正在制作一个数学库,因为 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/

相关文章:

javascript - 使用 Javascript 获取脚本文件的内容

javascript - 如何更改脚本中的 CHANGE ME 文本

javascript - 使 Firebug 在动态加载的 javascript 中中断

javascript - 如何修复 "Module build failed (from ./node_modules/babel-loader/lib/index.js):"?

php - 从 Jquery $.getJSON 方法获取数组的全局数组到 REUSE 数组

javascript - 带逗号的 CSS 选择器?

javascript - 为什么对象数组中的过滤器在 typescript 中不起作用

javascript - 将两个下拉列表的选定值发送到 PHP 脚本,而不使用 AJAX 提交

javascript - 如何填充 RadioNodeList?

javascript - 如何按顺序执行四个异步函数?