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

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

Giá trị trong JavaScript luôn thuộc một loại nhất định. Ví dụ, loại chuỗi hoặc loại số.

Có tám loại giá trị trong JavaScript, và ta gọi chúng là tám kiểu dữ liệu.

Mặc dù có khái niệm kiểu dữ liệu nhưng JavaScript không có khái niệm kiểu biến. Trong một số ngôn ngữ có kiểu tĩnh (được xác định ngay khi viết chương trình), một biến luôn có kiểu xác định và chỉ có thể lưu được các giá trị kiểu này. JavaScript không như vậy, nó là một ngôn ngữ có kiểu động (được xác định khi chạy chương trình). Chúng ta có thể đặt bất cứ loại dữ liệu nào vào trong một biến. Ở thời điềm này một biến có thể là một chuỗi, nhưng ở thời điểm khác là một số:

// không có lỗi
let message = "hello";
message = 123456;

1. Kiểu số

let n = 123;
n = 12.345

Kiểu số đại diện cho cả số nguyên và số thực (số dấu phảy động).

Có nhiều phép toán số học thực hiện cho các số:

  • *: nhân
  • /: chia
  • +: cộng
  • -: trừ
  • ...

Bên cạnh những số thông thường, JavaScript có những "số" đặc biệt sau:

  • Infinity: dương vô cùng (một số lớn hơn mọi số khác). Số này xuất hiện khi chia một số dương cho số 0:
    console.log( 1 / 0 ); // Infinity
    
  • -Infinity: âm vô cùng (một số nhỏ hơn mọi số khác). Số này xuất hiện khi chia một số âm cho số 0:
    console.log( -1 / 0 ); // -Infinity
    
  • NaN: đại diện cho một phép toán không chính xác hoặc không xác định:
    console.log( "not a number" / 2 ); // NaN
    console.log( 0 / 0 ); // NaN
    

2. Kiểu số nguyên lớn BigInt

Trong JavaScript, kiểu số chỉ có thể biểu diễn được các số nguyên trong khoảng -9007199254740991 đến 9007199254740991 (253-1).

Kiểu số nguyên lớn BigInt được bổ sung để biểu diễn các số nguyên có độ dài tùy ý.

Số nguyên BigInt được viết bằng cách thêm hậu tố n vào cuối một số nguyên:

const bigInt = 1234567890123456789012345678901234567890n;

3. Kiểu chuỗi

Một chuỗi trong JavaScript phải được bao quanh bởi dấu nháy.

let str = "Hello";
let str2 = 'Single quote are ok too';
let phrase = `can embed another ${str}`;

Có 3 loại dấu nháy:

  • Dấu nháy đôi (dấu ngoặc kép): "Hello".
  • Dấu nháy đơn (dấu nháy): 'Hello'.
  • Dấu nháy ngược (dấu backtick): `Hello`.

Dấu nháy đơn và dấu nháy đôi không có sự khác biệt.

Dấu nháy ngược hỗ trợ chúng ta nhúng các biến và biểu thức vào một chuỗi, bằng cách gói chúng vào ${...}, ví dụ:

let name = "John";

// nhúng một biến
console.log( `Hello, ${name}!` ); // Hello, John!

// nhúng một biểu thức
console.log( `the result is ${1 + 2}` ); // the result is 3

Biểu thức bên trong ${...} được chạy và kết quả trở thành một phần của chuỗi.

4. Kiểu lôgic (kiểu boolean)

Kiểu lôgic chỉ có hai giá trị truefalse.

Loại này thường được sử dụng để lưu trữ các giá trị có/không hay đúng/sai: true có nghĩa là "có, đúng" và false có nghĩa là "không, sai".

Ví dụ:

let nameFieldChecked = true; // có, trường `name` đã được kiểm tra
let ageFieldChecked = false; // không, trường `name` chưa được kiểm tra

Các giá trị lôgic cũng là kết quả của các phép so sánh:

let isGreater = 4 > 1;

console.log(isGreater); // true (kết quả so sánh là "đúng")

5. Kiểu null

Kiểu null là một kiểu đặc biệt, chỉ có một giá trị duy nhất, cùng tên là null:

let age = null;

Trong JavaScript, null đại diện cho "không có gì", "trống" hoặc "giá trị không xác định".

6. Kiểu undefined

Kiểu undefined chỉ có một giá trị duy nhất, cùng tên là undefined.

Ý nghĩa của undefined là "giá trị chưa được chỉ định".

Nếu một biến được khai báo, nhưng không được gán, thì giá trị của nó là undefined:

let age;

console.log(age); // undefined

Khác với null bạn không nên gán undefined trực tiếp cho một biến.

7. Kiểu đối tượng và kiểu symbol

Kiểu đối tượng là một kiểu đặc biệt. Tất cả các kiểu khác gọi là kiểu "cơ sở", nó chỉ chứa một thứ duy nhất (một chuỗi, một số, v.v.). Ngược lại, các đối tượng được sử dụng để chứa một bộ sưu tập dữ liệu.

Các symbol được sử dụng để tạo ra định danh duy nhất cho các thuộc tính của đối tượng.

Kiểm tra kiểu của một giá trị

Để kiểm tra kiểu (loại) của một giá trị, sử dụng toán tử typeof. Nó hỗ trợ hai cú pháp:

  1. Như một toán tử typeof x.
  2. Như một hàm typeof(x).

Lệnh typeof x trả về chuỗi mô tả kiểu của giá trị/biến x:

typeof 0 // "number" (kiểu số)

typeof 10n // "bitint" (kiểu số nguyên lớn)

typeof "foo" // "string" (kiểu chuỗi)

typeof true // "boolean" (kiểu lôgic)

typeof undefined // "undefined" (kiểu `undefined`)

typeof Math // "object" (kiểu đối tượng)

typeof null // "object" (lỗi của JavaScript được giữ lại vì cần sự tương thích)

typeof console.log // "function" (kiểu hàm, thực ra vẫn là đối tượng)
  1. Math là một đối tượng có sẵn của JavaScript.
  2. Kết quả của typeof null"object". Đó là một lỗi được chính thức công nhận trong hành vi của typeof, xuất phát từ những ngày đầu của JavaScript và được giữ lại để tương thích.
  3. Kết quả của typeof console.log"function", bởi vì console.log là một hàm. Các hàm thuộc kiểu đối tượng. Nhưng typeof đối sử với chúng khác với các đối tượng khác. Tuy không đúng, nhưng có thể thuận tiện trong thực tế.