为什么 JS 中这两个数组的语法不同?

Why's the syntax different between these two arrays in JS?

它们都包含相同的值,但我想知道为什么当我在 Dev 工具中调出它们时它们看起来不同。

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

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

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();

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

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

console.log()默认只详细显示第一个维度。您可以点击 widths 的三角形来查看内部维度的内容。如果将其更改为 log 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();