29

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

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

这是什么鬼?!

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

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

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

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

4

5 回答 5

39

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

> Array(100)
[undefined × 100]

这肯定比印刷[undefined, undefined, undefined,...]或以前更好。

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

于 2012-05-21T10:46:40.280 回答
7

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

例如,[,,undefined,,]在 DevTools 控制台中输入会导致:

▼(4) [empty × 2, undefined, empty]
   2: undefined
   length: 4
  ▶__proto__: Array(0)
于 2017-09-30T14:00:52.453 回答
2

谷歌浏览器似乎选择使用这种表示法来显示稀疏数组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]稀疏数组的 。

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

于 2012-10-07T07:38:03.860 回答
2

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

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

查看 *2 表示的前两个连续的“未定义”,表明那里有两个连续的未定义

于 2016-08-14T18:05:28.547 回答
0

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

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

  2. 在 push() 之后,我记录了数组,似乎发生这种情况时,它始终是 Chrome 上未定义 x 1 的最后一个。

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

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

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

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

  7. 然后在阵列上的另一个日志,仍然是错误的。

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

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

于 2012-07-30T22:22:45.063 回答