我正在下棋。而且我在程序中以阵列形式存储了一些棋盘瓦以供某些用途。问题是,当我更新数组中的值并将它们登录到控制台时,我可以看到正确的数组值。但是,单击并检查控制台中的实际值后,该数组将显示不同的值。
我正在使用Google Chrome浏览器的控制台。
我已经看到另一个堆栈溢出,说这是一个已知的“错误”,但是开发人员不会修复它,因为它实际上不是错误。
这是我在控制台中看到的内容:
(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);
为了提供一些上下文,我创建了一个名为moves的数组。我根据某些条件将值推入数组。然后,将阵列登录到控制台,这就是我上面显示的内容。
if语句之所以起作用,是因为我在数组中看到的值是正确的。但是,您知道,单击并检查控制台中的内部值后,它们是错误的。
我期望从控制台获得的结果是:
(2) ["a6", "a5"]
0: "a6"
1: "a5"
length: 2
__proto__: Array(0)
如何解决此问题?
答案 0 :(得分:0)
不确定这是原因,但是当console.log
时,Chrome和其他浏览器不输出数组/对象的序列化值,而只是将引用存储在它们上面。稍后,当您检查这些数组/对象时,Chrome将显示这些数组中的当前值,而不是记录时显示的值。
尝试使用console.log(JSON.stringify(thingToLog))
进行日志记录。甚至可以使用console.log(JSON.stringify(thingToLog, undefined, ' '))
更好。