Khóa học javascript

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

0 phút đọc

Trong hai bài viết về biếnhằng trong JavaScript, mình có đề cập đến việc gán giá trị cho biến và hằng. Ở đó, mỗi giá trị đều có một kiểu dữ liệu nhất định. Vậy bạn có biết kiểu dữ liệu là gì và các kiểu dữ liệu trong JavaScript là gì không?

Sau đây mình sẽ cùng tìm hiểu về các kiểu dữ liệu cơ bản trong JavaScript. Còn về chi tiết của từng kiểu dữ liệu thì mình sẽ giới thiệu ở các bài tiếp theo.

Kiểu dữ liệu 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ụ:

js Copy
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ụ:

js Copy
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ụ:

js Copy
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ụ:

js Copy
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 undefinednull:

  • 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ị:

js Copy
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.

js Copy
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ênsố thực.

js Copy
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; // => 2*10^3 = 2000
let n6 = 2e-3; // => 2*10^(-3) = 0.002
let n7 = 0xff; // số dạng hexa (hệ cơ số 16): 15*16 + 15 = 255
let n8 = 067; // số dạng octa (hệ cơ số 8): 6*8 + 7 = 55
let n9 = 0b11; // số dạng nhị phân (hệ cơ số 2): 1*2 + 1 = 3

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

  • 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à /).
js Copy
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.
js Copy
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.
js Copy
// 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ụ:

js Copy
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:

  • Dùng dấu nháy đơn (')
  • Dùng dấu nháy kép (")
  • Dùng dấu "backtick" (`)
js Copy
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ụ:

js Copy
// 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. (Chúng ta sẽ tìm hiểu sâu hơn về Symbol trong các bài viết sau)

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. (Chúng ta sẽ tìm hiểu sâu hơn về Object ở các bài sau)

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:

  • Dạng toán tử typeof x.
  • 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:

js Copy
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

Tổng kết

Sau đây là tóm tắt những kiến thức cơ bản về 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 boolean: bao gồm hai giá trị truefalse dùng để biểu diễn đúngsai.
  • Kiểu dữ liệu null: chỉ gồm một giá trị null, dùng để biểu thị trạng thái không biết giá trị.
  • Kiểu dữ liệu undefined: chỉ gồm một giá trị undefined, dùng để biểu thị trạng thái chưa gán giá trị.
  • Kiểu dữ liệu number: dùng để biểu diễn số nguyên hoặc số thực. Trong đó, số nguyên giới hạn trong đoạn ±(253-1.
  • Kiểu dữ liệu BigInt: dùng để biểu diễn số nguyên lớn, có độ dài tùy ý. Để biểu diễn số thuộc kiểu BigInt, bạn chỉ cần thêm chữ cái n ở cuối.
  • Kiểu dữ liệu string: dùng để biểu diễn kí tự, chuỗi ký tự,... bằng cách sử dụng dấu nháy đơn ('), nháy kép (") hoặc dấu "backtick" (`). Mỗi string có thể chứa một kí tự, nhiều kí tự hoặc không chứa kí tự nào (empty string).
  • Kiểu dữ liệu symbol: dùng để tạo ra những giá trị duy nhất, thường dùng làm "key" cho object.
  • Kiểu dữ liệu object: là tập hợp của các cập key-value.

Để kiểm tra kiểu dữ liệu của một biến, bạn có thể sử dụng typeof.

  • Có hai dạng: dạng toán tử typeof x hoặc ở dạng hàm typeof(x).
  • Kết quả trả về là một string ứng với tên của kiểu dữ liệu.
  • typeof null trả về object. Đây là một lỗi sơ khai của JavaScript. Thực chất, null không phải là object.
Avatar
Được viết bởi

Admin Team

Gợi ý câu hỏi phỏng vấn

Không có dữ liệu

Không có dữ liệu

Gợi ý bài viết
Không có dữ liệu

Không có dữ liệu

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào