SUBSCRIBE NEWSLETTERS

Xem nhiều nhất

Làm sao để kiểm tra kiểu dữ liệu (type) của object và array trong Javascript ?

Làm sao để kiểm tra kiểu dữ liệu (type) của object và array trong Javascript ?

Ngày đăng 11/11/2020
4 phút đọc
472 lượt xem
Duclux.Com
Tác giảDucLux.Com

Trong khi lập trình với bất cứ ngôn ngữ nào, việc kiểm tra type của dữ liệu khá là quan trọng. Ở trong Javascript, chúng ta có hàm typeof để kiểm tra type của dữ liệu. Tuy nhiên, hàm typeof trả về kết quả nhiều khi không đúng với ý định kiểm tra của chúng ta. Ví dụ khi bạn kiểm tra typeof của 1 array, thì nó vẫn trả về type là "object". Vậy làm như thế nào để kiểm tra chính xác kiểu dữ liệu trong Js. Bài này sẽ giúp các bạn giải quyết điều đó. Trước tiên chúng ta cùng điểm qua một chút,

Các kiểu dữ liệu trong Javascript

Theo ECMAScript mới nhất (năm 2020) thì có 9 kiểu dữ liệu trong Javascript: - Kiểu dữ liệu dạng primitive, bao gồm 1. Number 2. String 3. BigInit (Kiểu này mới được công bố năm 2020) 4. Symbol 5. Boolean 6. Undefined 7. Null (Kiểu này rất đặc biệt nhé, nó là suptype của các kiểu dữ liệu khác, thuộc dạng kiểu dữ liệu primitive, nhưng khi kiểm tra typeof null lại bằng "object" ^^. Nó khác với undefined, nó là một value, value này không có gì cả, nhưng nó là một value 😖) - Kiểu dữ liệu dạng reference, bao gồm: 8. Object : Đây là kiểu dữ liệu to nhất luôn, các loại như Map, Set, WeakMap, WeakSet, Object, Array đều là tập hợp con nó. Các kiểu primitive không phải là nó nhưng được wrap bởi nó nên có thể khởi tạo new như các loại kể trên nên gọi là object luôn cũng không sai. 9. Function: Tất nhiên rồi, Javascript Functional Programing phải có kiểu này chứ ^^.

Kiểm tra kiểu dữ liệu trong Javascript

Mình vừa điểm qua danh sách tất cả các kiểu dữ liệu trong Javascript. Muốn kiểm tra type của chúng, Javascript đã cung cấp sẵn hàm typeof. Hàm này nhận vào bất kì kiểu dữ liệu nào, và trả về string là tên kiểu dữ liệu của dữ liệu truyền vào.
typeof(1); // "number"
typeof('duclux.com'); // "string"
typeof(123n); "bigint"
typeof(Symbol('duc'); // "symbol"
typeof(true); // "boolean"
typeof(undefined); // "undefined"
typeof(null); // "object"
typeof({}); // "object"
typeof([1,2,3]) // "object"
typeof( () => {} ); // "function"
Như các bạn thấy, các hàm typeof trả về các kiểu dữ liệu dạng primitive đúng như chúng ta cần, tuy nhiên array và object đều trả về kiểu dữ liệu "object". Nếu không xác định được chính xác nó là array hay object, thì trong lúc dev chúng ta sẽ gặp những lỗi ngoài mong muốn.

Kiểm tra type object và Array

Bây giờ chúng ta mới đi vào trọng tâm của bài ngày hôm nay, và mình cũng xin báo với các bạn một tin mừng là chúng ta có nhiều cách để kiểm tra chính xác nó là một array hay object Cách 1: Dùng constructor Chúng ta tạo ra một hàm kiểm tra array như sau:
function isArrray(v) {
   return !!v && v.constructor === Array;
}
isArray( [1,2,3] ); // true;
isArray( [] ); // true;
isArray( {} ); // false;
isArray(1); // false;
Tương tự đối với kiểm tra kiểu dữ liệu object:
function isObject(v) {
   return !!v && v.constructor === Object;
}
isObject( [1,2,3] ); // false;
isObject( [] ); // false;
isObject( {} ); // true;
isObject(1); // false;
Giải thích một chút: Ở các hàm trên mình truyền vào đối số v, trước tiên mình kiểm kiểm tra nó khác null bằng cách convert nó về boolean !!v. Nếu thỏa mãn sẽ kiểm tra constructor của nó. Cách dữ liệu chúng ta sử dụng dạng object đều là instance của các kiểu dữ liệu cho nên lúc nào chúng ta cũng gọi được constructor của nó ra. Cách 2: Convert về string
function isArrray(v) {
   return !!v && Object.prototype.toString.call(v) === "[object Array]";
}
isArray( [1,2,3] ); // true;
isArray( [] ); // true;
isArray( {} ); // false;
isArray(1); // false;
Tương tự đối với kiểm tra kiểu dữ liệu object:
function isObject(v) {
   return return !!v && Object.prototype.toString.call(v) === "[object Object]";;
}
isObject( [1,2,3] ); // false;
isObject( [] ); // false;
isObject( {} ); // true;
isObject(1); // false;
Cách 3: Chúng ta có thể sử dụng Array.isArray() để check type của một array, tuy nhiên object không có sẵn hàm check kiểu này.
Array.isArray( [1,2,3] ); // true;
Array.isArray( [] ); // true;
Array.isArray( {} ); // false;
Array.isArray(1); // false;
Cách bạn có thể đọc thêm về Javascript Datatype tại đây
Tác giả
Cùng tác giả