- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个数学库,因为 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/
当我运行我的应用程序时,我在控制台中收到一条消息: 2011-11-16 19:17:41.292 Juice[8674:707] Applications are expected to have
我在 JavaScript 中使用了这个语句,但是当我尝试在 TypeScript 项目中使用它时出现错误。它在提示 fetch(...args) const fetcher = (...args)
我是一名优秀的程序员,十分优秀!