【问题标题】:Why does Chrome devtools display my array differently after spreading it? [duplicate]为什么 Chrome devtools 在展开后会以不同方式显示我的数组? [复制]
【发布时间】:2017-10-04 21:40:01
【问题描述】:

要创建一个由x 元素组成的数组,其中所有元素一开始都是未定义的,我使用了Array(x) 函数。如果我将其输入 Chrome devtools 控制台,它会以如下简写符号显示:

如果我随后使用扩展运算符 (...) 对该数组进行浅拷贝,则表示将更改为完整的数组打印输出:

如果我手动输入数组,也会使用完整的打印输出:

这是为什么? Chrome的undefined × x简写的使用条件是什么?

编辑

在创建undefineds 数组之前使用new 关键字不会影响Chrome 的表示:

【问题讨论】:

  • 它是 new Array(6)
  • 我忘记了我必须使用new,但即使我使用了,我仍然得到相同的输出。
  • 我刚刚发现它们是相等的,因为 function Array(){ if(this===window) return new Array(); } ,所以我现在很困惑为什么有人赞成我的错误陈述......:|

标签: javascript arrays google-chrome ecmascript-6 google-chrome-devtools


【解决方案1】:

需要注意的是没有关于控制台行为的规范或标准,可能的原因是新构造的数组的元素与具有显式分配值的元素(甚至 undefined)之间存在重要差异数组元素。该数组本质上跟踪特定单元格是否曾经是分配的目标(扩展语法有效地做到了)。在某些重要情况下,这些单元格的处理方式不同,主要涉及Array.prototype 上的各种数组迭代函数。这些(大部分)不会在迭代中包含从未分配的单元格。

所以控制台向您显示您的数组分配有 Array 构造函数和一个数字参数的长度为 6,但它在 JavaScript 数组意义上是“空的”,因为没有一个单元格是任何单元格的目标一种任务。

同样,不要依赖控制台的特定输出样式。 Firefox 和 IE 可能会显示不同的内容,任何浏览器都可能会随心所欲地在不同版本之间更改此类输出的外观。

【讨论】:

  • 另见“稀疏”与“密集”数组?
  • 这很有道理 - 谢谢!我的问题被标记为真的有助于清除问题的副本。
猜你喜欢
  • 2018-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 2019-05-07
相关资源
最近更新 更多