【问题标题】:Javascript array showing 2 values in console, only 1 when accessedJavascript 数组在控制台中显示 2 个值,访问时只有 1 个
【发布时间】:2025-12-20 21:50:07
【问题描述】:

我有一个 Javascript 数组。 当我将数组打印到控制台时,我得到:

console.log(my_array_of_arrays);


Array[2] ->, Array[2] ->,  
0: 678       0: 1168
1: 865       1: 1370
length: 2    length: 2

这表明两个数组中都有 2 项。

然后,当我通过访问“.length”或 my_array[1] 访问数组中的最后一项时,它告诉我该数组只有一项,而第二项未定义。

var my_array = my_array_of_arrays[1];
console.log(my_array, my_array.length, my_array[0], my_array[1]);


[1168, 1370], 1, 1168, undefined

如您所见,如果我在同一个控制台日志语句中执行所有操作,就会发生这种情况,所以我知道数组没有改变。

这里会发生什么,我完全被难住了。

为清晰起见进行了编辑

【问题讨论】:

  • 您能否发布一个链接到一个演示这一点的实时示例,例如jsbin.com?
  • 第二次调试时你为什么不这样做:console.log(my_array,my_array.length, my_array[0], my_array[1]);?在同一事件之后,它来自同一行吗?
  • 完全放置函数以便我们分析它
  • 这看起来就像你一直在搞乱Array.prototype,或者正在使用一些(写得不好的)库来做到这一点。在这种情况下还有哪些其他脚本在起作用?
  • 我想这是可能的(我正在使用 Array.prototype)。我正在使用 jQuery FullCalendar 插件。当我进行搜索时,我确实找到了对 Array.prototype.slice.call 的调用,但它们似乎与我尝试访问的数组不在同一个范围内。

标签: javascript arrays


【解决方案1】:

从 Chrome 中的控制台

spo = [000,111]
(spo[0] == 000) //true
(spo[1] == 111) //true

我不确定你还能做什么 = /

【讨论】:

  • 我知道。问题是它适用于我的数组数组中的其余数组。这让我心烦意乱
【解决方案2】:

我发现在函数的后面,值 my_array[2] 直到我调用了 console.log() 之后才被设置。
然而,这显示了 console.log() 的一些奇怪行为。
它不一定在调用时显示数组的实时值。

例如。

var my_array = [111];
console.log(my_array);
my_array[1] = 222;

打印出来:

[111, 222]

当我期待它打印时:

[111]

这意味着 console.log() 在调用时并不总是显示真实值的“实时”表示。

但是,如果我访问数组上的属性,它将显示实时值。

例子:

var my_array = [111];
console.log(my_array.length, my_array[1]);
my_array[1] = 222;

按预期打印:

1, undefined

我猜我不能像以前那样信任控制台了!

【讨论】: