Một giá trị trong JavaScript luôn thuộc một kiểu nhất định. Ví dụ, một chuỗi hoặc một số.
Có tám loại dữ liệu cơ bản trong JavaScript. Ở đây, chúng tôi sẽ đề cập đến chúng nói chung và trong các chương tiếp theo, chúng ta sẽ nói chi tiết về từng phần.
Chúng ta có thể đặt bất kỳ loại nào trong một biến. Ví dụ: một biến có thể tại một thời điểm là một chuỗi và sau đó lưu một số:
/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/
// no error
let message = "hello";
message = 123456;
Các ngôn ngữ lập trình cho phép những thứ như vậy, chẳng hạn như JavaScript, được gọi là ngôn ngữ có kiểu động, có nghĩa là có các kiểu dữ liệu, nhưng các biến không bị ràng buộc với bất kỳ kiểu dữ liệu nào cả, có thể tay đổi khi gián một giá trị khác.
Nội dung chính
1. Kiểu số
let n = 123;
n = 12.345;
Kiểu số đại diện cho cả số nguyên và số dấu phẩy động.
Có nhiều thao tác cho các số, ví dụ: nhân *
, chia /
, cộng +
, trừ -
, v.v.
Bên cạnh số thông thường, có những cái gọi là “giá trị số đặc biệt” mà cũng thuộc kiểu dữ liệu này: Infinity
, -Infinity
và NaN
.
-
Infinity
đại diện cho toán học có ý nghĩa là giá trị vô cùng ∞. Đó là một giá trị đặc biệt lớn hơn bất kỳ số nào. Chúng ta có thể lấy nó từ kết quả của phép chia cho số 0:alert( 1 / 0 ); // Infinity
Hoặc chỉ cần dùng trực tiếp:
alert( Infinity ); // Infinity
NaN
đại diện cho một lỗi tính toán. Ví dụ, đó là kết quả của một phép toán không chính xác hoặc không xác định:
alert( "not a number" / 2 ); // NaN, such division is erroneous
NaN
là không xác định. Bất kỳ hoạt động nào khác thường sẽ trả về NaN
:
alert( "not a number" / 2 + 5 ); // NaN
- Vì vậy, nếu có một
NaN
nơi nào đó trong biểu thức toán học, nó sẽ lan truyền đến toàn bộ kết quả.
Các phép toán đều an toàn
Làm toán là một trò chơi an toàn trong JavaScript. Chúng ta có thể làm bất cứ điều gì: chia cho số 0, coi các chuỗi không phải là số, v.v.
Kịch bản sẽ không bao giờ dừng lại với một lỗi nghiêm trọng (chết app). Tệ nhất, chúng ta sẽ nhận được kết quả làNaN
.
Các giá trị số đặc biệt thuộc về kiểu Số. Tất nhiên chúng không phải là số theo nghĩa thông thường của từ này.
Chúng ta sẽ thấy nhiều hơn về làm việc với các số trong chương Số .
2. BigInt
Trong JavaScript, Kiểu Số không thể biểu thị các giá trị nguyên lớn hơn (253-1)
(9007199254740991
) hoặc nhỏ hơn âm. Đó là một hạn chế kỹ thuật gây ra của họ.-(-253-1)
Đối với hầu hết việc sử dụng thì với giá trị đó là khá đủ, nhưng đôi khi chúng ta cần những con số thực sự lớn, ví dụ như code hóa hoặc dấu thời gian chính xác micro giây.
BigInt
là một kiểu gần đây đã được thêm vào ngôn ngữ để thể hiện số nguyên có độ dài tùy ý.
Một BigInt
giá trị được tạo bằng cách nối thêm n
vào cuối số nguyên:
// the "n" at the end means it's a BigInt
const bigInt = 1234567890123456789012345678901234567890n;
Vì số BigInt
hiếm khi cần thiết, chúng ta không bao gồm chúng ở đây, nhưng dành cho chúng một chương riêng BigInt .Dùng nó khi bạn cần số lượng lớn như vậy.
Vấn đề tương thích
Ngay bây giờ BigInt
được hỗ trợ trong Firefox và Chrome, nhưng không có trong Safari / IE / Edge.
3. Chuỗi – String
Một chuỗi trong JavaScript phải được bao quanh bởi dấu ngoặc kép.
/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/
let str = "Hello";
let str2 = 'Single quotes are ok too';
let phrase = `can embed another ${str}`;
Trong JavaScript, có 3 loại trích dẫn.
- Dấu ngoặc kép :
"Hello"
. - Dấu ngoặc đơn :
'Hello'
. - Backticks :
`Hello`
.
Dấu ngoặc đôi và đơn là dấu đơn giản. Thực tế không có sự khác biệt giữa chúng trong JavaScript.
Backticks là chức năng mở rộng của trích dẫn. Chúng cho phép 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ụ:
/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/
let name = "John";
// embed a variable
alert( `Hello, ${name}!` ); // Hello, John!
// embed an expression
alert( `the result is ${1 + 2}` ); // the result is 3
Biểu thức bên trong ${…}
được ước tính và kết quả trở thành một phần của chuỗi. Chúng ta có thể đặt bất cứ thứ gì vào đó: một biến như name
hoặc một biểu thức số học như 1 + 2
hoặc một cái gì đó phức tạp hơn.
Xin lưu ý rằng điều này chỉ có thể được thực hiện trong backticks. Các trích dẫn khác không có chức năng nhúng này!
alert( "the result is ${1 + 2}" ); // the result is ${1 + 2} (double quotes do nothing)
Chúng tôi sẽ nói kỹ lưỡng hơn trong các chương chuỗi.
Không có kiểu character.
Trong một số ngôn ngữ, có một kiểu ký tự đặc biệt cho một ký tự. Ví dụ, trong ngôn ngữ C và trong Java, nó được gọi là kiểu char.
Trong JavaScript, không có loại đó. Chỉ có một kiểu: string
. Một chuỗi có thể chỉ bao gồm một ký tự hoặc nhiều ký tự.
4. Boolean (kiểu logic)
Kiểu boolean 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: true
có nghĩa là có, đúng, và false
có nghĩa là không, không chính xác.
Ví dụ:
let nameFieldChecked = true; // yes, name field is checked
let ageFieldChecked = false; // no, age field is not checked
Các giá trị Boolean cũng là kết quả của sự so sánh:
let isGreater = 4 > 1;
alert( isGreater ); // true (the comparison result is "yes")
Chúng tôi sẽ đề cập đến booleans sâu hơn trong chương Toán tử logic .
5. Giá trị null
null
là giá trị đặc biệt không thuộc về bất kỳ loại nào được mô tả ở trên.
Nó tạo thành một kiểu riêng của nó chỉ chứa giá trị null
:
let age = null;
Trong JavaScript, null
không phải là một tham chiếu tới một đối tượng không tồn tại, hay một con trỏ null, giống như trong một số ngôn ngữ khác.
Nó chỉ là một giá trị đặc biệt đại diện cho không có gì cả
Các code ở trên age
không có giá trị gì cả.
6. Giá trị không xác định
Giá trị đặc biệt undefined
. Nó là một kiểu riêng, giống như null
.
Ý nghĩa của giá trị undefined
là không được gán.
Nếu một biến được khai báo, nhưng không được chỉ định, thì giá trị của nó là undefined
:
let age;
alert(age); // shows "undefined"
Về mặt kỹ thuật, có thể gán rõ ràng undefined
cho một biến:
let age = 100;
// change the value to undefined
age = undefined;
alert(age); // "undefined"
Nhưng chúng tôi không khuyên bạn nên làm điều đó. Thông thường, người ta sử dụng null
để gán một giá trị trống rỗng hoặc một ẩn số không rõ ràng cho một biến, trong khi undefined
được dành làm giá trị ban đầu mặc định cho những thứ chưa được gán.
7. Đối tượng và Biểu tượng(symbol)
Các kiểu object
là đặc biệt.
Tất cả các kiểu khác được gọi là kiểu nguyên thủy, vì giá trị của chúng chỉ có thể chứa một thứ duy nhất (có thể là một chuỗi hoặc một số hoặc bất cứ thứ gì). Ngược lại, các đối tượng được sử dụng để lưu trữ các bộ sưu tập dữ liệu và các thực thể phức tạp hơn.
Quan trọng là các đối tượng được đối xử đặc biệt. Chúng ta sẽ giải quyết chúng sau này trong chương Đối tượng , sau khi chúng ta tìm hiểu thêm về các kiểu nguyên thủy.
Các kiểusymbol
được sử dụng để tạo ra định danh duy nhất cho các đối tượng. Chúng tôi phải đề cập đến nó ở đây vì mục đích để bạn biết về nó, nhưng cũng hoãn lại các chi tiết cho đến khi chúng ta biết về các đối tượng.
8. Toán tử typeof
Các toán tử typeof
cho phép trả về kiểu của đối số. Nó hữu ích khi chúng ta muốn xử lý các giá trị của các kiểu khác nhau hoặc chỉ muốn kiểm tra nhanh.
Nó hỗ trợ hai dạng cú pháp:
- Là một toán tử :
typeof x
. - Là một hàm :
typeof(x)
.
Nói cách khác, nó hoạt động với dấu ngoặc đơn hoặc không có chúng. Kết quả là như nhau.
Gọi typeof x
để trả về một chuỗi với tên kiểu:
/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/
typeof undefined // "undefined"
typeof 0 // "number"
typeof 10n // "bigint"
typeof true // "boolean"
typeof "foo" // "string"
typeof Symbol("id") // "symbol"
typeof Math // "object" (1)
typeof null // "object" (2)
typeof alert // "function" (3)
Ba dòng cuối có thể cần giải thích thêm:
Math
là một đối tượng được tích hợp để cung cấp các hoạt động toán học. Chúng ta sẽ học nó trong chương Số . Ở đây, nó phục vụ như một ví dụ về một đối tượng.- Kết quả
typeof null
là"object"
. Đó là một lỗi được công nhận trong hàmtypeof
, xuất phát từ những ngày đầu của JavaScript và được giữ nguyên để tương thích. Chắc chắn,null
không phải là một đối tượng. Đó là một giá trị đặc biệt với một kiểu riêng của nó. - Kết quả
typeof alert
là"function"
, bởi vìalert
là một hàm. Chúng ta sẽ nghiên cứu các hàm trong các chương tiếp theo, trong đó chúng ta cũng sẽ thấy rằng không có loại hàm đặc biệt nào trong chương trình này cả. Các hàm thuộc về kiểu đối tượng. Nhưngtypeof
sẽ trở lại"function"
. Điều đó cũng xuất phát từ những ngày đầu của JavaScript. Về mặt kỹ thuật, hành vi như vậy không đúng, nhưng có thể thuận tiện trong thực tế.
9. Tóm lược
Có 8 kiểu dữ liệu cơ bản trong JavaScript.
number
kiểu số thuộc bất kỳ kiểu nào: số nguyên hoặc dấu phẩy động, số nguyên bị giới hạn bởi ± 2 53 .bigint
là cho số nguyên có độ dài tùy ý.string
cho chuỗi. Một chuỗi có thể có một hoặc nhiều ký tự, không có kiểu ký tự đơn riêng biệt.boolean
là kiểu logic có 2 giá trị làtrue
/false
.null
cho các giá trị không xác định – một loại độc lập có một giá trị duy nhấtnull
.undefined
cho các giá trị chưa được gán – một loại độc lập có một giá trị duy nhấtundefined
.object
cho các cấu trúc dữ liệu phức tạp hơn.symbol
cho định danh duy nhất.
Các toán typeof
cho phép chúng ta xem những kiểu được lưu trữ trong một biến.
- Hai hình thức:
typeof x
hoặctypeof(x)
. - Trả về một chuỗi với tên của kiểu, như
"string"
. - Đối với
null
trả về"object"
– đây là một lỗi trong ngôn ngữ, nó không thực sự là một đối tượng.
Trong các chương tiếp theo, chúng ta sẽ tập trung vào các giá trị kiểu nguyên thủy và một khi chúng ta quen thuộc với chúng, chúng ta sẽ chuyển sang các đối tượng.