Kiểu dữ liệu trong javascript là gì ?

Kiểu dữ liệu trong javascript là gì ?


Kiểu dữ liệu là một cách phân loại dữ liệu cho trình biên dịch hoặc trình thông dịch hiểu về kiểu của dữ liệu đang sử dụng. Đối với nhiều ngôn ngữ lập trình, khi khai báo một biến, bạn phải chỉ rõ biến đó thuộc kiểu dữ liệu gì. Nhưng đối với JavaScript thì khác, một biến có thể thuộc bất kỳ kiểu dữ liệu nào.

ví dụ:

let x = 999;                   
console.log(x); // 999        

x = "Helloworld";
console.log(x); // Helloworld


Bạn thấy rằng, biến x ban đầu được gán giá trị kiểu số. Nhưng sau đó, mình gán lại giá trị kiểu chuỗi kí tự cho biến x và không có lỗi nào xảy ra.


Đây vừa là ưu điểm, nhưng cũng là nhược điểm của JavaScript.

  • Ưu điểm: kiểu dữ liệu linh động giúp việc lập trình trở nên linh hoạt hơn.
  • Nhược điểm: khi chương trình trở nên phức tạp, số lượng dòng code nhiều lên, có thể bạn sẽ khó kiểm soát kiểu dữ liệu của biến, dẫn đến sai trong việc xử lý, tính toán.

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


JavaScript có 8 kiểu dữ liệu cơ bản, trong đó, có 7 kiểu dữ liệu nguyên thủy (boolean, null, undefined, number, BigInt, string, symbol) và 1 kiểu dữ liệu dạng tham chiếu (object).


  • Kiểu dữ liệu nguyên thủy: là kiểu dữ liệu mà giá trị không thể thay đổi được. Đây là kiểu dữ liệu ứng với "level thấp nhất" của ngôn ngữ lập trình.
  • Kiểu dữ liệu tham chiếu: (object): là tập hợp của các thuộc tính (key) và giá trị (value). Mà số lượng các key có thể thay đổi, giá trị ứng với key cũng có thể thay đổi. Do đó, giá trị của kiểu dữ liệu tham chiếu có thể thay đổi được.

Kiểu dữ liệu boolean (kiểu logic)


Boolean là kiểu dữ liệu logic chỉ bao gồm hai giá trị là true (đúng, chính xác) và false (sai, không chính xác), ví dụ:


let isWebLoaded = true; // => Trang web đã được tải xong
console.log(isWebLoaded); // true

let isProgramRunning = false; // Chương trình đang không chạy
console.log(isProgramRunning); // false


Kiểu dữ liệu null


Kiểu dữ liệu null là một kiểu dữ liệu đặc biệt, chỉ bao gồm một giá trị là null, ví dụ:


let language = null;
console.log(language); // null


Trong ví dụ trên, biến language được hiểu là không biết giá trị hoặc không có giá trị.


Kiểu dữ liệu undefined


Cũng tương tự như null, undefined là một kiểu dữ liệu đặc biệt trong JavaScript, chỉ bao gồm một giá trị undefined, ví dụ:


let language = undefined;
console.log(language); // undefined


Kiểu dữ liệu undefined có nghĩa là giá trị chưa được gán.


📝 Khác nhau cơ bản giữa undefined và null:


Kiểu dữ liệu null là kiểu dữ liệu được gán cho biến, thường được hiểu là không biết (không có).

Trong khi đó, kiểu dữ liệu undefined là giá trị mặc định của biến sau khi khai báo mà không gán giá trị cho biến.


Ví dụ khai báo biến mà không gán giá trị:

let language;
console.log(language); // undefined


Trường hợp biến đã có giá trị rồi, bạn vẫn có thể chủ động gán lại giá trị undefined cho biến. Tuy nhiên, điều này là không nên. Vì như vậy là không đúng ý nghĩa của kiểu dữ liệu undefined.


let language = "JavaScript";

console.log(language); // JavaScript


// KHÔNG NÊN

language = undefined;
console.log(language); // undefined


// NÊN

language = null;
console.log(language); // null


Kiểu dữ liệu number


Kiểu dữ liệu number là kiểu dữ liệu dạng số (tương tự trong toán học). Number trong JavaScript không có cú pháp gì đặc biệt. Bạn chỉ cần viết số ra.

JavaScript có hai loại số là: số nguyên và số thực.


let n1 = 66; // số nguyên dương
let n2 = -66; // số nguyên âm
let n3 = 3.14; // số thực dương
let n4 = -3.14; // số thực âm
let n5 = 2e3; // => 210^3 = 2000
let n6 = 2e-3; // => 210^(-3) = 0.002
let n7 = 0xff; // số dạng hexa (hệ cơ số 16): 1516 + 15 = 255
let n8 = 067; // số dạng octa (hệ cơ số 8): 68 + 7 = 55
let n9 = 0b11; // số dạng nhị phân (hệ cơ số 2): 12 + 1 = 3


Ngoài những loại số trên, JavaScript còn có 3 số đặc biệt là: Infinity, -Infinity và NaN.

  • Infinity: là số dương vô cùng. Đây là giá trị đặc biệt và nó lớn hơn bất kỳ số nào khác. Bạn có thể sử dụng giá trị này trực tiếp hoặc thu được nó bằng cách lấy lấy số dương bất kỳ chia cho 0 (toán tử chia trong JavaScript là /).
console.log(Infinity); // Infinity
console.log(1 / 0); // Infinity
  • Infinity: là số âm vô cùng. Đây cũng là giá trị đặc biệt và nó nhỏ hơn bất kỳ số nào khác. Bạn có thể sử dụng giá trị này trực tiếp hoặc thu được nó bằng cách lấy lấy số âm bất kỳ chia cho 0.
console.log(-Infinity); // -Infinity
console.log(-1 / 0); // -Infinity
  • NaN: là viết tắt của Not a Number, được sử dụng để đại diện cho những trường hợp tính toán sai hoặc kết quả của một phép tính không xác định.
// Lấy 0 / 0
console.log(0 / 0); // NaN

// Lấy chuỗi ký tự chia cho số
console.log("JavaScript" / 2); // NaN

// Lấy hai số Infinity trừ cho nhau

console.log(Infinity - Infinity); // NaN


Nhờ những số đặc biệt này mà việc tính toán trong JavaScript "luôn an toàn".


Vì chương trình sẽ không bao giờ bị crash do lỗi chia cho 0 hay giá trị không phải số. Điều mà bạn có thể gặp phải ở nhiều ngôn ngữ khác như C/C++, Java,...


Kiểu dữ liệu BigInt


Trong JavaScript, kiểu dữ liệu number không thể biểu diễn một số nguyên lớn hơn (253-1) (bằng 9007199254740991) và nhỏ hơn -(253-1).


Với hầu hết các trường hợp, việc sử dụng kiểu dữ liệu number là quá đủ. Nhưng đôi khi, bạn vẫn cần biểu diễn và tính toán với những số nguyên cực kỳ lớn. Do đó, kiểu dữ liệu BigInt ra đời nhằm giải quyết vấn đề này.


Để biểu diễn số nguyên với kiểu BigInt, bạn chỉ cần thêm chữ cái n ở phía sau, ví dụ:


const reallyBigNumber = 12345678987654321012345678987654321n;
console.log(reallyBigNumber); // 12345678987654321012345678987654321n


Kiểu dữ liệu string


String là kiểu dữ liệu dùng để biểu diễn chữ, văn bản, đoạn văn bản,...

Có ba cách để biểu diễn string trong JavaScript:

  1. Dùng dấu nháy đơn (')
  2. Dùng dấu nháy kép (")
  3. Dùng dấu "backtick" (`)

Ví dụ:

const msg1 = 'Đây là string dùng dấu nháy đơn';
const msg2 = "Đây là string dùng dấu nháy kép";
const msg3 = `Đây là string dùng dấu backtick`;


Dấu nháy đơn và dấu nháy kép là hoàn toàn giống nhau.

Riêng với dấu "backtick", bạn có thể sử dụng biến, hằng hoặc thậm chí viết một biểu thức trong đó, với cú pháp ${…}, ví dụ:


// Truyền biến vào trong dấu "backtick"
let name = "Lam";
console.log(`My name is ${name}`); // My name is Lam

// Truyền hằng vào trong dấu "backtick"
const language = "JavaScript";
console.log(`You are learning ${language}`); // You are learning JavaScript

// Truyền vào biểu thức
console.log(`1 + 2 = ${1 + 2}`); // 1 + 2 = 3


String trong JavaScript có thể chỉ gồm 1 kí tự "a", nhiều kí tự "abc" hoặc không kí tự nào "" (empty string).


Kiểu dữ liệu symbol


  • Symbol là một kiểu dữ liệu nguyên thủy dùng để tạo ra các giá trị duy nhất (unique value) và bất biến (immutable). Symbol thường được dùng làm key cho kiểu dữ liệu object sau đây.
  • Mình đã viết một bài chi tiết về Symbol. Bạn có thể tìm hiểu về Symbol trong JavaScript để hiểu nhiều hơn về kiểu dữ liệu này.

Kiểu dữ liệu object


Object là kiểu dữ liệu tham chiếu. Có thể hiểu object là một tập hợp gồm các cặp key - value (khóa - giá trị).


Trong đó, kiểu dữ liệu của key có thể là string hoặc symbol. Và value ứng với key có thể là bất kỳ kiểu dữ liệu nào.


Cách xác định kiểu dữ liệu của biến:


Như mình đã nói ở trên, một biến trong JavaScript có thể thuộc bất kỳ kiểu dữ liệu nào. Để xác định kiểu dữ liệu hiện tại của một biến, JavaScript cung cấp cho bạn typeof, với hai loại cú pháp:

  1. Dạng toán tử typeof x.
  2. Dạng hàm typeof(x).

Kết quả trả về sẽ là một string ứng với tên của kiểu dữ liệu. Ví dụ về toán tử typeof với các kiểu dữ liệu trong JS:


let x;
console.log(typeof x); // undefined

x = true;
console.log(typeof x); // boolean

x = 1;
console.log(typeof x); // number

x = 1234567891234567890123456789125345362n;
console.log(typeof x); // bigint

x = "hello";
console.log(typeof x); // string

// (1)
x = Symbol("id");
console.log(typeof x); // symbol

// (2)
x = { n: 1 };
console.log(typeof x); // object

// (3)
x = null;
console.log(typeof x); // object


Cần nói thêm về ba trường hợp (1), (2), (3):

  • (1): Cách khởi tạo symbol sẽ trình bày chi tiết ở bài tìm hiểu về Symbol trong JavaScript.
  • (2): Cách tạo object sẽ trình bày chi tiết ở bài JavaScript Object - last but not least.
  • (3): Đây có thể coi là một lỗi của typeof được tạo ra khi JavaScript mới xuất hiện. Nhưng vì tính tương thích ngược, nên đặc điểm này của typeof vẫn được giữ đến bây giờ.

quản trị viên

Chia sẻ bài viết:

Tin tức liên quan

Cách sử dụng Async Await Fetch Axios trong lập trình JavaScript

Cách sử dụng Async Await Fetch Axios trong lập trình JavaScript

Trong lập trình JavaScript, async/await và fetch/axios là những khái niệm quan trọng giúp xử lý các tác vụ bất đồng bộ một cách dễ dàng và hiệu quả. Trên thực tế, chúng đã trở thành tiêu chuẩn cho việc làm việc với API và tương tác với dữ liệu từ máy chủ. Trong bài viết này, chúng ta sẽ khám phá sâu hơn về async/await, fetch, axios và cách chúng hoạt động trong lập trình JavaScript.

Xem thêm...