Javascript JS多维数组-如何使.push()函数正常工作

Javascript JS多维数组-如何使.push()函数正常工作,javascript,arrays,Javascript,Arrays,下面的代码示例是我在internet上找到的 arr[1].push('native', 'laravel'); 描述 在这里,我们使用javascript数组推送方法向内部子数组添加两个新元素(项) 这正是我想要完成的 但当我自己尝试过几次时,总是这样: let mainArr=[]; 控制台日志(“mainArr:,mainArr”); //按预期工作:创建了一个空数组 设emptyArr=[]; 日志(“emptyArr:,emptyArr”); //按预期工作:创建了一个空数组 对于

下面的代码示例是我在internet上找到的

arr[1].push('native', 'laravel');
描述

在这里,我们使用javascript数组推送方法向内部子数组添加两个新元素(项)

这正是我想要完成的

但当我自己尝试过几次时,总是这样:

let mainArr=[];
控制台日志(“mainArr:,mainArr”);
//按预期工作:创建了一个空数组
设emptyArr=[];
日志(“emptyArr:,emptyArr”);
//按预期工作:创建了一个空数组
对于(i=0;i<3;i++){
主推力(排空器);
}
控制台日志(“mainArr:,mainArr”);
//按预期工作:将“emptyArr”按3次进入“mainArr”
设newArr=[[“X”],[90];
mainArr[0]。推送(newArr);
log(“mainArr[0]:”,mainArr[0]);
log(“mainArr[1]:”,mainArr[1]);
log(“mainArr[2]:”,mainArr[2]);
//未按预期工作:将“newArr”推入“mainArr”中的三个阵列中的每一个!!!

//如何解决这个问题?
这是因为数组是JS中的对象,即非原语类型的变量

详细解释

Javascript有5种按值传递的数据类型:Boolean、String、Number、null和undefined。这些被称为基本类型

它有3种通过引用传递的数据类型:数组、函数和对象。这些都是技术上的目标

将非原语值指定给变量时,所发生的情况是指定了该值的引用,而不是实际值。即,该引用指向对象在内存中的位置。这些变量实际上并不包含该值

在您的情况下

当您按下
emptyArr
三次时,您没有插入值(即new空数组),您插入了与
emptyArr
相同的内存引用。这3个引用指向内存中具有空数组值的同一位置。鉴于此,现在将
newArr
插入到
mainArr[0]
的引用值中,但其余元素
mainArr[1]
mainArr[2]
是指向与
mainArr[0]
所指向的值相同的引用

希望它有意义

否则,您可以参考这里
或者我也觉得这篇文章在视觉上非常具有描述性和帮助性

非常感谢!我花了几个小时寻找这个答案。。。