Javascript内部更改数组值,任何修复?

问题描述 投票:2回答:1

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

我正在使用谷歌浏览器的控制台。

我已经看到另一个堆栈溢出说这是一个已知的“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)

我该如何解决这个问题?

javascript html5
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.