Javascript 为什么这两个空数组的填充方式不同?

Javascript 为什么这两个空数组的填充方式不同?,javascript,arrays,Javascript,Arrays,我有这个密码。我甚至放了console.logs来调试它。但我真的不明白为什么他们的行为方式不同。为什么result1数组用最后一个数组值填充所有内部数组 var myMatrix=[ [0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15] ]; 函数旋转矩阵(矩阵){ var long=矩阵长度; var result1=新数组(长).fill([]); var result2=[]、[]、[]、[]、[]; log(“空结果

我有这个密码。我甚至放了console.logs来调试它。但我真的不明白为什么他们的行为方式不同。为什么result1数组用最后一个数组值填充所有内部数组

var myMatrix=[
[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11],
[12, 13, 14, 15]
];
函数旋转矩阵(矩阵){
var long=矩阵长度;
var result1=新数组(长).fill([]);
var result2=[]、[]、[]、[]、[];
log(“空结果1:”);
console.log(result1);
log(“空结果2:”);
console.log(result2);
对于(变量行=0;行<长;行++){
for(var col=0;col旋转矩阵(myMatrix)您正在使用中数组的相同对象引用填充数组

var result1 = new Array(long).fill([]);
//                                 ^^ same array for all elements
以后的任何赋值都发生在同一数组中

在工作版本中

var result2 = [[], [], [], []];
//             ^^  ^^  ^^  ^^  four different arrays
您使用四个不同的数组,它们没有对同一数组的引用

引用表示静态行为,而Javascript则通过引用传递对象

fill()
方法使用静态值填充从开始索引到结束索引的所有数组元素

var myMatrix=[
[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11],
[12, 13, 14, 15]
];
函数旋转矩阵(矩阵){
var数组=[];
var long=矩阵长度;
var result1=新数组(长)。填充(数组);
var result2=[]、[]、[]、[]、[];
log(“空结果1:”);
console.log(result1);
log(“空结果2:”);
console.log(result2);
对于(变量行=0;行<长;行++){
for(var col=0;colRotateMaryXClockWise(myMatrix)
让我直截了当地说:它通过引用将新数组传递给数组四次。fill()?那太糟糕了。我刚刚尝试将
[]
更改为
新数组
,它也做了同样的事情。除了for循环之外,还有什么方法可以让它每次都创建新数组吗?您可以映射空数组,但仍然需要一些迭代。@Tyrannogina new array(100).fill(0).map(array)@Tyrannogina似乎更适合写数组(100).fill(0).map(=>[])。。。下划线表示函数中未使用的变量,该变量比
()=>
短一点。