Có tám loại dữ liệu cơ bản trong JavaScript. Ở đây, chúng tôi sẽ đề cập đến chúng một cách tổng quát và trong các chương tiếp theo, chúng tôi sẽ nói chi tiết về từng loại
Chúng ta có thể đặt bất kỳ loại nào trong một biến. Ví dụ, một biến tại một thời điểm có thể là một chuỗi và sau đó lưu trữ một số
// 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à "kiểu động", nghĩa là tồn tại 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 nào trong số chúng
let n = 123;
n = 12.345;
Loại số đại diện cho cả số nguyên và số dấu phẩy động
Có nhiều phép toán đối với các số, e. g. phép nhân
let n = 123;
n = 12.345;
7, phép chia let n = 123;
n = 12.345;
8, phép cộng let n = 123;
n = 12.345;
9, phép trừ alert[ 1 / 0 ]; // Infinity
0, v.v.Bên cạnh các số thông thường, còn có cái gọi là “giá trị số đặc biệt” cũng thuộc loại dữ liệu này.
alert[ 1 / 0 ]; // Infinity
1, alert[ 1 / 0 ]; // Infinity
2 và alert[ 1 / 0 ]; // Infinity
3
1 đại diện cho Vô cực toán học ∞. Đó là một giá trị đặc biệt lớn hơn bất kỳ số nàoalert[ 1 / 0 ]; // Infinity
Chúng ta có thể lấy nó là kết quả của phép chia cho số không
alert[ 1 / 0 ]; // Infinity
Hoặc chỉ cần tham khảo nó trực tiếp
1let n = 123; n = 12.345;
3 đại diện cho một lỗi tính toán. Đó 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, chẳng hạnalert[ 1 / 0 ]; // Infinity
3let n = 123; n = 12.345;
3 là dính. Bất kỳ phép toán nào khác trênalert[ 1 / 0 ]; // Infinity
3 đều trả vềalert[ 1 / 0 ]; // Infinity
3alert[ 1 / 0 ]; // Infinity
7let n = 123; n = 12.345;
Vì vậy, nếu có một
3 ở đâu đó trong một biểu thức toán học, thì nó sẽ lan truyền đến toàn bộ kết quả [chỉ có một ngoại lệ đối với điều đó.alert[ 1 / 0 ]; // Infinity
10 làlet n = 123; n = 12.345;
11]let n = 123; n = 12.345;
Các phép toán được an toàn
Làm toán là “an toàn” trong JavaScript. chúng ta có thể làm bất cứ điều gì. chia cho 0, coi các chuỗi không phải số là số, v.v.
Tập lệnh sẽ không bao giờ dừng lại với một lỗi nghiêm trọng [“chết”]. Tệ nhất, chúng ta sẽ nhận được kết quả là
alert[ 1 / 0 ]; // Infinity
3Các giá trị số đặc biệt chính thức thuộc loại “số”. Tất nhiên chúng không phải là những con số theo nghĩa thông thường của từ này
Chúng ta sẽ xem thêm về cách làm việc với các số trong chương Số
Trong JavaScript, loại "số" không thể đại diện một cách an toàn cho các giá trị số nguyên lớn hơn
let n = 123;
n = 12.345;
13 [đó là let n = 123;
n = 12.345;
14] hoặc nhỏ hơn let n = 123;
n = 12.345;
15 cho số âmThực sự chính xác, loại “số” có thể lưu trữ các số nguyên lớn hơn [tối đa
let n = 123;
n = 12.345;
16], nhưng bên ngoài phạm vi số nguyên an toàn let n = 123;
n = 12.345;
17 sẽ có lỗi chính xác, vì không phải tất cả các chữ số đều phù hợp với bộ lưu trữ 64 bit cố định. Vì vậy, một giá trị "xấp xỉ" có thể được lưu trữVí dụ: hai số này [ngay trên phạm vi an toàn] giống nhau
let n = 123;
n = 12.345;
7Vì vậy, có thể nói, tất cả các số nguyên lẻ lớn hơn
let n = 123;
n = 12.345;
13 hoàn toàn không thể được lưu trữ trong loại "số"Đối với hầu hết các mục đích, phạm vi
let n = 123;
n = 12.345;
17 là khá đủ, nhưng đôi khi chúng ta cần toàn bộ phạm vi của các số nguyên thực sự lớn, e. g. cho mật mã hoặc dấu thời gian chính xác micro giâyLoại
let n = 123;
n = 12.345;
30 gần đây đã được thêm vào ngôn ngữ để biểu thị các số nguyên có độ dài tùy ýGiá trị
let n = 123;
n = 12.345;
30 được tạo bằng cách nối thêm let n = 123;
n = 12.345;
32 vào cuối một số nguyênlet n = 123;
n = 12.345;
3Vì số
let n = 123;
n = 12.345;
30 hiếm khi cần thiết nên chúng tôi không đề cập đến chúng ở đây mà dành riêng cho chúng một chương BigInt. Đọc nó khi bạn cần những con số lớn như vậyNhững vấn đề tương thích
Hiện tại,
let n = 123;
n = 12.345;
30 được hỗ trợ trong Firefox/Chrome/Edge/Safari, nhưng không hỗ trợ trong IEBạn có thể kiểm tra để biết phiên bản trình duyệt nào được hỗ trợ
Một chuỗi trong JavaScript phải được bao quanh bởi dấu ngoặc kép
let n = 123;
n = 12.345;
6Trong JavaScript, có 3 loại trích dẫn
- Dấu ngoặc kép.
35let n = 123; n = 12.345;
- Dấu nháy đơn.
36let n = 123; n = 12.345;
- đánh dấu ngược.
37let n = 123; n = 12.345;
Dấu ngoặc kép và dấu ngoặc đơn là dấu ngoặc kép "đơn giản". Thực tế không có sự khác biệt giữa chúng trong JavaScript
Backticks là trích dẫn “chức năng mở rộng”. 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 trong
let n = 123;
n = 12.345;
38 chẳng hạnlet n = 123;
n = 12.345;
1Biểu thức bên trong
let n = 123;
n = 12.345;
38 được đánh giá 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ư let n = 123;
n = 12.345;
70 hoặc một biểu thức số học như let n = 123;
n = 12.345;
71 hoặc một cái gì đó phức tạp hơnXin lưu ý rằng điều này chỉ có thể được thực hiện trong backticks. Các báo giá khác không có chức năng nhúng này
let n = 123;
n = 12.345;
0Chúng tôi sẽ đề cập kỹ hơn về chuỗi trong chương Chuỗi
Không có loại ký tự
Trong một số ngôn ngữ, có một loại "ký tự" đặc biệt cho một ký tự. Ví dụ, trong ngôn ngữ C và Java nó được gọi là “char”
Trong JavaScript, không có loại như vậy. Chỉ có một loại.
let n = 123;
n = 12.345;
72. Một chuỗi có thể bao gồm 0 ký tự [để trống], một ký tự hoặc nhiều ký tựKiểu boolean chỉ có hai giá trị.
let n = 123;
n = 12.345;
73 và let n = 123;
n = 12.345;
74Loại này thường được sử dụng để lưu trữ giá trị có/không.
let n = 123;
n = 12.345;
73 có nghĩa là “đúng, đúng” và let n = 123;
n = 12.345;
74 có nghĩa là “không, sai”Ví dụ
let n = 123;
n = 12.345;
1Giá trị Boolean cũng là kết quả của sự so sánh
let n = 123;
n = 12.345;
2Chúng ta sẽ đề cập sâu hơn về các phép toán luận trong chương Toán tử logic
Giá trị
let n = 123;
n = 12.345;
77 đặc biệt không thuộc bất kỳ loại nào được mô tả ở trênNó tạo thành một loại riêng biệt chỉ chứa giá trị
let n = 123;
n = 12.345;
77let n = 123;
n = 12.345;
3Trong JavaScript,
let n = 123;
n = 12.345;
77 không phải là “tham chiếu đến đối tượng không tồn tại” hay “con trỏ null” như trong một số ngôn ngữ khácNó chỉ là một giá trị đặc biệt đại diện cho “không có gì”, “trống rỗng” hoặc “giá trị không xác định”
Đoạn mã trên nói rằng
let n = 123;
n = 12.345;
70 không xác địnhGiá trị đặc biệt
let n = 123;
n = 12.345;
71 cũng nổi bật. Nó tạo ra một kiểu của riêng nó, giống như let n = 123;
n = 12.345;
77Ý nghĩa của
let n = 123;
n = 12.345;
71 là "giá trị không đượ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à
let n = 123;
n = 12.345;
71let n = 123;
n = 12.345;
4Về mặt kỹ thuật, có thể gán rõ ràng
let n = 123;
n = 12.345;
71 cho một biếnlet n = 123;
n = 12.345;
5…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
let n = 123;
n = 12.345;
77 để gán giá trị “rỗng” hoặc “không xác định” cho một biến, trong khi let n = 123;
n = 12.345;
71 được dành riêng làm giá trị ban đầu mặc định cho những thứ chưa được gánLoại
let n = 123;
n = 12.345;
78 là đặc biệtTất cả các loại khác được gọi là "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 kỳ 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
Là quan trọng như vậy, các đối tượng xứng đáng được đối xử đặc biệt. Chúng ta sẽ giải quyết chúng sau trong chương Đối tượng, sau khi chúng ta tìm hiểu thêm về nguyên thủy.
Loại
let n = 123;
n = 12.345;
79 được sử dụng để tạo đị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 hoàn chỉnh, nhưng cũng hoãn lại các chi tiết cho đến khi chúng tôi biết các đối tượngToán tử
let n = 123;
n = 12.345;
30 trả về loại toán hạng. Nó hữu ích khi chúng tôi muốn xử lý các giá trị thuộc các loại khác nhau theo cách khác hoặc chỉ muốn kiểm tra nhanhMột cuộc gọi đến
let n = 123;
n = 12.345;
31 trả về một chuỗi có tên loạilet n = 123;
n = 12.345;
6Ba dòng cuối cùng có thể cần giải thích thêm
32 là một đối tượng tích hợp sẵn cung cấp các phép toán. Chúng ta sẽ tìm hiểu nó trong chương Những con số. Ở đây, nó phục vụ như một ví dụ về một đối tượnglet n = 123; n = 12.345;
- Kết quả của
33 làlet n = 123; n = 12.345;
34. Đó là một lỗi được công nhận chính thức tronglet n = 123; n = 12.345;
30, xuất hiện từ những ngày đầu tiên của JavaScript và được lưu giữ để tương thích. Chắc chắn,let n = 123; n = 12.345;
77 không phải là một đối tượng. Nó là một giá trị đặc biệt với một loại riêng biệt của riêng nó. Hành vi củalet n = 123; n = 12.345;
30 là sai ở đâylet n = 123; n = 12.345;
- Kết quả của
38 làlet n = 123; n = 12.345;
39, vìlet n = 123; n = 12.345;
60 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, nơi chúng ta cũng sẽ thấy rằng không có loại "hàm" đặc biệt nào trong JavaScript. Các chức năng thuộc loại đối tượng. Nhưnglet n = 123; n = 12.345;
30 đối xử với họ khác đi, trả lạilet n = 123; n = 12.345;
39. Đ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 là không đúng, nhưng có thể thuận tiện trong thực tếlet n = 123; n = 12.345;
Cú pháp
63let n = 123;
n = 12.345;
Bạn cũng có thể gặp một cú pháp khác.
let n = 123;
n = 12.345;
63. Nó giống như let n = 123;
n = 12.345;
31Để làm cho nó rõ ràng.
let n = 123;
n = 12.345;
30 là toán tử, không phải hàm. Dấu ngoặc đơn ở đây không phải là một phần của let n = 123;
n = 12.345;
30. Đó là loại dấu ngoặc đơn được sử dụng để nhóm toán họcThông thường, các dấu ngoặc đơn như vậy chứa một biểu thức toán học, chẳng hạn như
let n = 123;
n = 12.345;
68, nhưng ở đây chúng chỉ chứa một đối số let n = 123;
n = 12.345;
69. Về mặt cú pháp, chúng cho phép tránh khoảng trắng giữa toán tử let n = 123;
n = 12.345;
30 và đối số của nó, và một số người thích điều nàyMột số người thích dùng
let n = 123;
n = 12.345;
63 hơn, mặc dù cú pháp let n = 123;
n = 12.345;
31 phổ biến hơn nhiềuCó 8 kiểu dữ liệu cơ bản trong JavaScript
- Bảy kiểu dữ liệu nguyên thủy
13 cho bất kỳ loại số nào. số nguyên hoặc dấu phẩy động, số nguyên bị giới hạn bởilet n = 123; n = 12.345;
17let n = 123; n = 12.345;
15 cho số nguyên có độ dài tùy ýlet n = 123; n = 12.345;
72 cho chuỗi. Một chuỗi có thể có 0 hoặc nhiều ký tự, không có loại ký tự đơn riêng biệtlet n = 123; n = 12.345;
17 cholet n = 123; n = 12.345;
73/let n = 123; n = 12.345;
74let n = 123; n = 12.345;
77 cho các giá trị không xác định – một loại độc lập có một giá trị duy nhấtlet n = 123; n = 12.345;
77let n = 123; n = 12.345;
71 cho các giá trị chưa được gán – một loại độc lập có một giá trị duy nhấtlet n = 123; n = 12.345;
71let n = 123; n = 12.345;
79 cho số nhận dạng duy nhấtlet n = 123; n = 12.345;
- Và một loại dữ liệu không nguyên thủy
78 cho các cấu trúc dữ liệu phức tạp hơnlet n = 123; n = 12.345;
Toán tử
let n = 123;
n = 12.345;
30 cho phép chúng ta xem loại nào được lưu trữ trong một biến- Thường được sử dụng như
31, nhưng cũng có thể dùnglet n = 123; n = 12.345;
63let n = 123; n = 12.345;
- Trả về một chuỗi có tên của loại, chẳng hạn như
09let n = 123; n = 12.345;
- Đối với
77 trả vềlet n = 123; n = 12.345;
34 – đây là một lỗi trong ngôn ngữ, nó không thực sự là một đối tượnglet n = 123; n = 12.345;
Trong các chương tiếp theo, chúng ta sẽ tập trung vào các giá trị nguyên thủy và khi đã quen thuộc với chúng, chúng ta sẽ chuyển sang các đối tượng