我已经使用JS编程了大约半年了,突然,我遇到了一个非常奇怪的行为。
我正在创建一个游戏,不要与HTML或CSS部分混淆-不要对其进行编辑。 JS需要它,但是那里没有错误。
因此,我有两个数组:queueToRemoveArr = []
,queueToAddArr = []
。
然后,在第53行上有一个if
语句。如果为true,则执行以下两行:
console.log("remove live cells", rowArg, cellArg);
queueToRemoveArr.push($table.rows[rowArg].cells[cellArg]);
我正在使用
console.log()
只是为了检查将哪个元素推送到数组。在第58行,还有另一个
if
,如果该内容为true,则执行该内容。我已将其注释掉,因此该问题更容易解决。//queueToAddArr.push($table.rows[rowArg].cells[cellArg]);
让我们运行它,看看会得到什么:
这是第一代(换句话说,我第一次运行功能
happyEventToCreateLiveCells
。一切看起来都很好,如图所示。 1 + 1 = 2,这就是
queueToRemoveArr
数组中有多少个元素。 queueToAddArr
数组为空,因为我对此不做任何事情。没有push()
,什么都没有。让我们再次运行它(第二次):
那这里发生了什么?请解释。数组
queueToRemoveArr
中包含一个元素,这是可以的,因为1 = 1(参见照片?)。但是queueToAddArr
在地球上是如何得到一件物品的?它与queueToRemoveArr
数组中指定的项目完全相同。我可以告诉您,如果我们取消注释
//queueToAddArr.push($table.rows[rowArg].cells[cellArg]);
行会发生什么,但我将给您显示图片。完全相同的数组。但是,只有第二次运行。第一次运行我尝试的所有东西时,它都能工作。第二次运行有什么问题?
由于最多30000个字符的限制,因此无法在此处添加堆栈代码段,但您已经很清楚地了解了我所描述的问题。
Codepen链接:https://codepen.io/Kestis500/pen/NYzJLQ?editors=0010。
仅观看JS零件。
最佳答案
此行导致了您的问题:
queueToRemoveArr = queueToAddArr = [];
它应该是:
queueToRemoveArr =[];
queueToAddArr = [];
关于javascript - 不使用push()函数,将JavaScript数组的数据复制到另一个数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49667262/