【问题标题】:Why's the syntax different between these two arrays in JS?为什么JS中这两个数组的语法不同?
【发布时间】:2017-08-31 21:11:57
【问题描述】:

它们都包含相同的值,但我想知道为什么当我在开发工具中将它们排除在外时它们看起来不同。

var values = [6, 6, 6, 19, 13, 50]; 

function boxWidth() {
    var widths = new Array();
    widths.push(values);
    console.log(widths);
    console.log(values);
} 

【问题讨论】:

  • 澄清一下,你问为什么widths[Array(6)]values[6,6,6,19,13,50]
  • "它们都包含相同的值" - 不,它们没有。单击检查按钮(灰色三角形)以查看它们有何不同。
  • 澄清一下。一个看起来像 -> [6,6,6,19,13,50],另一个看起来像 [[6,6,6,19,13,50]],如果这可以帮助您看到区别..
  • 这显然是一个嵌套数组阅读更多关于 JS 中的堆栈

标签: javascript arrays developer-tools


【解决方案1】:

widths 数组是一个数组,它有一个引用 values 数组的成员,而 values 是一个包含 6 个数字的数组。

要单独复制数字,请执行以下操作:

widths.push(...values);

或者在你创建数组的时候做:

var widths = [...values];

或与旧版兼容:

var widths = values.slice();

您可以对数组进行序列化以获得更清晰的视图。

var values = [6, 6, 6, 19, 13, 50]; 

function boxWidth() {
    var widths = new Array();
    widths.push(values);
    console.log(JSON.stringify(widths));
    console.log(JSON.stringify(values));
} 

boxWidth();

【讨论】:

  • 谢谢,现在完全明白了。有点困惑。我看到我在一个数组中有一个数组,这有意义吗?
  • 是的,这正是你所拥有的。 :-)
【解决方案2】:

values 是一个包含 6 个数字的一​​维数组。

widths 是一个二维数组。它的第一个维度是单个元素,它是对values 的引用。第二个维度是values 中的 6 个数字。

console.log() 默认只详细显示第一个维度。可以点击widths的三角揭秘,查看内维度的内容。如果您将其更改为记录 JSON,您将看到每个的完整结构。然后您会在widths 中看到额外的嵌套级别。

var values = [6, 6, 6, 19, 13, 50]; 

function boxWidth() {
    var widths = new Array();
    widths.push(values);
    console.log(JSON.stringify(widths));
    console.log(JSON.stringify(values));
} 

boxWidth();

【讨论】:

  • 这正是我刚刚所做的,感谢您为我解决这个问题。
猜你喜欢
  • 2018-01-28
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
  • 2017-08-07
  • 2018-12-17
  • 1970-01-01
相关资源
最近更新 更多