Trong chức năng của tôi, tôi đã xác định hai mảng, đầu tiên (array1), có độ dài được khởi tạo trước. Tôi đã thêm mảng thứ hai (array2) chỉ để thử nghiệm bởi vì tôi nghĩ rằng đầu tiên là hành xử kỳ lạ.Tại sao hai javascript 2d mảng này hoạt động khác nhau?
Mã của tôi:
function test(n = 3) {
array1 = new Array(n).fill(new Array(n));
array2 = [
[undefined, undefined, undefined],
[undefined, undefined, undefined],
[undefined, undefined, undefined]
];
document.getElementById("output").innerHTML = JSON.stringify(array1) + " (array 1) <br/>" + JSON.stringify(array2) + " (array 2)<br/><br/><hr/>";
for (i = 0; i < n; i++) {
array1[i][0] = i;
array2[i][0] = i;
}
document.getElementById("output").innerHTML += JSON.stringify(array1) + " (array 1) <br/>" + JSON.stringify(array2) + " (array 2)<br/><br/><hr/>";
}
<button onclick="test();">Press to test</button>
<br/><br/>
<div id="output"></div>
Trong for
vòng lặp, tôi cố gắng để thay đổi giá trị đầu tiên của các kích thước thứ hai. Nó sẽ xuất ra [[0, undefined, undefined], [1, undefined, undefined], [2, undefined, undefined]]
, giống như mảng thứ hai.
Câu hỏi của tôi là: tại sao điều này lại xảy ra? Và, làm thế nào tôi có thể tạo một mảng được khởi tạo trước với độ dài n trong cả hai chiều, hoạt động giống như mảng thứ hai?
Chia sẻ một bài báo, tại sao không sử dụng mảng mới(), hy vọng điều này sẽ giúp -> https: // coderwall.com/p/h4xm0w/why-never-use-new-array-trong-javascript – mindaJalaj