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ị true
và false
.
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:
- Như một toán tử
typeof x
. - 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)
Math
là một đối tượng có sẵn của JavaScript.- Kết quả của
typeof null
là"object"
. Đó là một lỗi được chính thức công nhận trong hành vi củatypeof
, xuất phát từ những ngày đầu của JavaScript và được giữ lại để tương thích. - Kết quả của
typeof console.log
là"function"
, bởi vìconsole.log
là một hàm. Các hàm thuộc kiểu đối tượng. Nhưngtypeof
đố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ế.