Trong JS, mảng là đối tượng đặc biệt (typeof [] === 'object'). Do đó, cần phương pháp chuyên biệt để phân biệt mảng và object thường.
Cách 1: Array.isArray() — Khuyên dùng
Phương thức chuẩn ES5, hoạt động đúng trong mọi ngữ cảnh (iframe, window khác nhau).
Array.isArray(bien); // true / false
Ví dụ
<script>
const arr = [1,2,3,4,5];
const str = "i love javascript";
document.write(Array.isArray(arr)); // true
document.write('<br>');
document.write(Array.isArray(str)); // false
</script>
Cách 2: instanceof Array
Kiểm tra chuỗi prototype. Nhược điểm: Sai khi mảng đến từ iframe/window khác (prototype khác).
bien instanceof Array; // true / false
Ví dụ
<script>
const arr = [1,2,3];
const obj = {};
document.write(arr instanceof Array); // true
document.write('<br>');
document.write(obj instanceof Array); // false
</script>
Cách 3: Kiểm tra constructor
bien.constructor === Array; // true / false
Nhược điểm: Có thể bị ghi đè (obj.constructor = Array), không an toàn.
Ví dụ
<script>
const arr = [1,2,3];
document.write(arr.constructor === Array); // true
</script>
Bảng so sánh
| Phương pháp | Độ tin cậy | Hỗ trợ cross-frame | Khuyến nghị |
|---|---|---|---|
| Array.isArray() | Cao nhất | Có | Dùng mặc định |
| instanceof | Trung bình | Không | Chỉ cùng window |
| constructor | Thấp | Không | Không khuyến khích |
Kết luận
Luôn dùng Array.isArray() cho code production. Hai cách còn lại chỉ để hiểu bản chất hoặc code cũ.