我正在下棋。而且我在棋盘中存储了一些棋子用于我的程序中的一些用法。问题是,当我更新数组中的值并将它们记录到控制台时,我可以看到数组的值,这是正确的。但是,在单击并检查控制台中的实际值时,阵列显示不同的值。
我正在使用谷歌浏览器的控制台。
我已经看到另一个堆栈溢出说这是一个已知的“bug”,但是开发人员不会修复它,因为它实际上并不是一个bug。
这是我在控制台中看到的内容:
(2) ["a6", "a5"]
0: "`6"
1: "b6"
length: 2
__proto__: Array(0)
如您所见,我看到的数组中的值与存储在数组中的值不同。这导致我的程序中的许多其他问题依赖于此数组的内容。
我想知道的是,这是否常见,以及是否有任何修复。或者可能是某些情况发生的情况。
另外,我仍然不确定,对于上面显示的数组^,是数组的实际值,我看到的值(“a6”和“a5”),或内部显示的错误值(“6”和“b6” “)。
请帮助,如果这不起作用,完成我正在进行的项目将非常困难。
这是我用来更新数组的代码:
let moves = [];
if (tile.slice(1, 2) == 7 && b1.board[dd].piece == null && b1.board[d].piece == null) {
moves.push(d);
moves.push(dd);
}
if (tile.slice(1, 2) == 7 && b1.board[d].piece == null && b1.board[dd].piece != null) {
moves.push(d);
}
if (parseInt(tile.slice(1, 2)) > 1 && tile.slice(1, 2) != 7 && b1.board[d].piece == null) {
moves.push(d);
}
if (tile.charCodeAt(0) > 97 && parseInt(tile.slice(1, 2)) > 1 && b1.board[ld].piece != null && b1.board[ld].piece.slice(0, 1) == "w") {
moves.push(ld);
}
if (tile.charCodeAt(0) < 104 && parseInt(tile.slice(1, 2)) > 1 && b1.board[rd].piece != null && b1.board[rd].piece.slice(0, 1) == "w") {
moves.push(rd);
}
console.log(moves);
只是提供一些上下文,我创建一个名为move的数组。我根据某些条件将值推入数组。然后我将数组记录到控制台上,这就是我在上面显示的内容。
if语句正在工作,因为我在数组中看到的值是正确的。但是如您所知,在单击并检查控制台中的内部值时,它们是错误的。
我期望从控制台得到的结果是:
(2) ["a6", "a5"]
0: "a6"
1: "a5"
length: 2
__proto__: Array(0)
我该如何解决这个问题?
不确定这是原因,但是当console.log
,Chrome和其他浏览器不输出数组/对象的序列化值时,只是将引用存储在它们上。稍后当您检查这些数组/对象时,Chrome将显示这些数组中的当前值,而不是日志记录时显示的值。
尝试使用console.log(JSON.stringify(thingToLog))
进行日志记录。或者甚至更好地使用console.log(JSON.stringify(thingToLog, undefined, ' '))
。