Javascript内部更改数组值,有什么解决方法吗?

时间:2019-03-28 08:24:19

标签: javascript html5

我正在下棋。而且我在程序中以阵列形式存储了一些棋盘瓦以供某些用途。问题是,当我更新数组中的值并将它们登录到控制台时,我可以看到正确的数组值。但是,单击并检查控制台中的实际值后,该数组将显示不同的值。

我正在使用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)

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

不确定这是原因,但是当console.log时,Chrome和其他浏览器不输出数组/对象的序列化值,而只是将引用存储在它们上面。稍后,当您检查这些数组/对象时,Chrome将显示这些数组中的当前值,而不是记录时显示的值。

尝试使用console.log(JSON.stringify(thingToLog))进行日志记录。甚至可以使用console.log(JSON.stringify(thingToLog, undefined, ' '))更好。