JavaScript 中的“未定义 x 1”是什么?

IT技术 javascript arrays oop arguments
2021-01-22 02:36:57

我正在根据这个博客条目做一些小实验

我正在 Google Chrome 的调试器中进行这项研究,这里是困难的部分。

这是什么鬼?!

我知道我无法删除局部变量(因为它们不是对象属性)。我知道我可以从名为“arguments”的数组中“读出”传递给函数的所有参数。我什至知道我不能删除和数组的元素,只能实现具有array[0]未定义的值。

有人可以向我解释undefined x 1嵌入图像的含义吗?

当我覆盖函数foo以返回 时arguments[0],我会得到通常和“正常”的未定义。

这只是一个实验,但似乎很有趣,有人知道undefined x 1指的是什么吗?

5个回答

这似乎是 Chrome 在数组(和类似数组的对象)中显示未初始化索引的新方法

> Array(100)
[undefined × 100]

这当然比印刷[undefined, undefined, undefined,...]或以前更好

虽然,如果只有一个undefined值,他们可能会删除x 1.

我的数组就像 var e = [a(b), a(c), a(d)] chrome 显示 undefined x 3 如果我访问它 (e[0]) 它显示正确的类型。
2021-03-15 02:36:57
哦,虽然我已经把手伸进了一些我不应该有的东西...... =D 好的,thanx mate,+1,接受!=D
2021-03-27 02:36:57
@alex:是的,在这种情况下,索引01实际上存在于数组中。稍微改变了我的答案的措辞。
2021-03-27 02:36:57
@FelixKling 它发生在我使用星星的寻路中。只是第一个 console.log(open) 是 [undefined x xx] 而第二个 console.log(open[0]) 是正确的类型。我不知道为什么会这样。我不能提供一个例子,因为我无法让这种行为在任何其他代码上工作,而且我不想显示我的代码......所以不,我不能。但是谢谢你的回答。
2021-04-05 02:36:57
好东西。似乎只适用于隐式 undefineds,例如new Array(100)调用它但[undefined, undefined]
2021-04-06 02:36:57

较新版本的 Chrome 使用empty而不是undefined使差异更清晰。

例如,[,,undefined,,]在 DevTools 控制台中输入结果:

▼(4) [empty × 2, undefined, empty]
   2: undefined
   length: 4
  ▶__proto__: Array(0)

谷歌浏览器似乎选择使用这种表示法显示稀疏数组undefined x n它将显示[undefined, undefined]它是否不是稀疏数组:

var arr = new Array(2);
console.log(arr);

var arr2 = [];
arr2[3] = 123;
console.log(arr2);

var arr3 = [,,,];
console.log(arr3)

var arr4 = [,];
console.log(arr4)

var arr5 = [undefined, undefined]
console.log(arr5)

var arr6 = [undefined]
console.log(arr6)

arr1 到 arr4 都是稀疏数组,而 arr5 和 arr6 不是。Chrome 会将它们显示为:

[undefined × 2] 
[undefined × 3, 123] 
[undefined × 3] 
[undefined × 1] 
[undefined, undefined] 
[undefined] 

注意[undefined x 1]稀疏数组的 。

由于您删除了一个元素,因此:如果您从数组中删除一个元素,则该数组将变得稀疏。

这是它的外观,将此代码输入 chrome devtools 控制台:-

arr = new Array(4);
arr[2] = "adf";
console.log(arr);    // [undefined × 2, "adf", undefined × 1]

查看*2所代表的前两个连续的“undefined”,说明那里有两个连续的undefined

它也发生在我身上。在另一个浏览器中打开相同的内容并将数组输出/记录到控制台。只要它在crome和firefox中都以相同的方式工作(因为即使输出具有undefinedx1,访问元素也能正常工作),我认为它是Chrome中的某种错误,无法在内部刷新某些内容。您实际上可以通过以下方式对其进行测试:

  1. 我正在向数组中添加元素,并触发 console.log() 来记录元素,以检查它是否未定义。他们都被定义了。

  2. 在 push() 之后,我记录了数组,似乎发生这种情况时,Chrome 上总是最后一个 undefined x 1。

  3. 然后我尝试记录它更多次和以后,但结果相同。

  4. 但是,当我访问(为了输出)元素时,它的索引返回了正确的值(有趣)。

  5. 之后,我再次记录了数组,它说最后一个索引是 undefined x 1(我刚刚成功直接访问的那个!)。

  6. 然后我在数组上做了一个 for 循环,记录或使用每个元素,一切都很好。

  7. 然后再次登录阵列,仍然有问题。

    我最初使用的代码检查了 undefined 并且它们没有触发,但是我在控制台中看到了所有这些 un​​defined 并且它正在困扰我(没有双关语)。

还值得一读:仅使用 Array.push 时数组中的单元化变量?我在我的代码中也使用了 pop() ,这是一个合理的解释,即控制台日志实际上代表了不同的时间状态(当代码“停止”时)。