在哪里可以找到有关JavaScript中对象内数组行为的信息?

时间:2015-12-19 19:41:21

标签: javascript arrays object

我在JavaScript对象中有一个数组,其行为方式无法解释。

代码是:

var board = {
    val: [false],
    init: function() {

        console.log(board);      // when expanded, console says board.val[0] = true
        console.log(board.val);  // console says board.val[0] = false

        board.val[0] = true;
    },
};

board.init();

该方法在控制台中输出对象,然后修改数组中的值。但是在更改值之前对象的输出表明该值已经更改。

我正在寻找为什么发生这种情况的解释,或者是解释的链接。如果需要,请在评论中要求澄清。我很乐意提供我忽略的任何细节。

我正在处理的项目中的数组是一个大型的多维数组,这种行为会导致意外的结果。对不起,我没有任何想法或研究要分享。我不知道该搜索什么不能给我JavaScript数组的基础知识。我以为我知道JavaScript数组和对象是如何工作的,但这让我很难过。

1 个答案:

答案 0 :(得分:3)

控制台的工作原理 - 当您记录完整(未展开)对象时,您会在展开时看到其属性的值,而不是在对象时被记录了。所以,在你的情况下,你得到的是真实的,因为它同时成了现实。

没有"修复"为此,除了可能在记录对象时对对象进行字符串化,但是当您需要准确表示变量时,请确保记录变量本身,而不是其父对象。

它与数组和对象的行为方式相同,只要您的数组/对象嵌套得足够深,以便控制台可以折叠它,请注意:



var arr = [[false]];
var obj = {sub: {subsub: false}};
console.log(arr, obj, JSON.stringify(arr), JSON.stringify(obj));

arr[0][0] = true;
obj.sub.subsub = true;




打开控制台,将它们展开,然后在同一个控制台行中看到矛盾(false / true)。