有人能向我解释为什么以下的Javascript控制台发生(节点7.2.0):例如,在JavaScript数组差异不同初始化方法
阵列I具有比例如II和III
不同的行为实例我
> var x = new Array(3).fill(new Array(2).fill(0))
> x
[ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ]
> x[0][0] = 1;
> x
[ [ 1, 0 ], [ 1, 0 ], [ 1, 0 ] ]
例Ⅱ
> var y = [...new Array(3)].map(()=>{return [...new Array(2)].map(()=>0)})
> y
> [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ]
> y[0][0] = 1
> [ [ 1, 0 ], [ 0, 0 ], [ 0, 0 ] ]
实施例III
> var y = []
> y.push([ 0, 0 ])
> y.push([ 0, 0 ])
> y.push([ 0, 0 ])
> y
> [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ]
> y[0][0] = 1
> [ [ 1, 0 ], [ 0, 0 ], [ 0, 0 ] ]
看来不同的方式来初始化数组将使阵列的不同的行为。我很困惑,并提前感谢你。
我不这么认为,我特别使用了new运算符来为fill函数创建一个新数组,以避免使用相同的引用。 – weiway
'new Array()'创建一个*数组* *。 array.fill()不会创建副本,它只是将数组元素分配给传递给它的任何内容(在本例中为单个数组)。 – mscdex