myArr
là native array rồi, khi bạn sử dụng cú pháp như vậy là đã sử dụng native array.
var myArr = [1, 2, 3];
Phân tích chi tiết hơn tí xíu, câu lệnh có thể phân thành 2 phần.
Phần 1:
[1,2,3]
Cú pháp có [ và ] thực chất hỗ trợ thay cho cú pháp khởi tạo bằng constructor thông thường.
new Array(1, 2, 3)
JS chuyển lệnh new
cho C++ thực thi, C++ dựa trên các tham số do JS truyển vào (3 giá trị 1, 2, 3). Do tham số là 3 số nguyên, nên C++ tạo kiểu dữ liệu native tối ưu là Int8Array
(là subclass của TypedArray), và chuyển địa chỉ (pointer) từ C++ sang JavaScript.
Mở rộng thêm, Array phía JS được hỗ trợ bởi rất nhiều class bên C++, tuỳ vào Compiler hiện thực thế nào. Nếu mảng không liên tục ([0,,,,1,,,2,,3]
) thì có thể sử dụng binary tree, nếu mảng liên tục thì có thể sử dụng C array (int[]
, char[]
). Nếu các phần tử của mảng cũng 1 kiểu dữ liệu thì có thể dùng class TypedArray
(và các subclasses) hoặc TypedTree
(và các subclasses).
Phần 2:
var myArr = <<pointer>>;
<<pointer>>
từ C++ chuyển sang được lưu vào biến myArr
.
Viết array giả bằng JS, hay array-like object là viết giống như thế này nè 
var fakeArray = {
'0': 1,
'1': 2,
'2': 3,
length: 3,
push: function (v) {
this[this.length] = v;
this.length++;
},
pop: function () {
this.length--;
var v = this[this.length];
delete this[this.length];
return v;
}
};
Muốn chuyển thành array xịn, hay native array:
var realArray = Array.from(fakeArray);