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.

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, -InfinityNaN.

  • 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

NaNlà 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 NaNnơ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 BigIntgiá trị được tạo bằng cách nối thêm nvà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.

  1. Dấu ngoặc kép : "Hello".
  2. Dấu ngoặc đơn : 'Hello'.
  3. 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ư namehoặc một biểu thức số học như 1 + 2hoặ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ị: truefalse.

Loại này thường được sử dụng để lưu trữ các giá trị có / không: truecó nghĩa là có, đúng, và falsecó 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

nulllà 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, nullkhô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 agekhô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 undefinedcho 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ử typeofcho 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:

  1. Là một toán tử : typeof x.
  2. 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:

  1. Mathlà 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.
  2. Kết quả typeof null"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, nullkhô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ó.
  3. Kết quả typeof alert"function", bởi vì alertlà 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ưng typeof 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.

  • numberkiể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 ý.
  • stringcho 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.
  • booleanlà kiểu logic có 2 giá trị là true/ false.
  • nullcho các giá trị không xác định – một loại độc lập có một giá trị duy nhất null.
  • undefinedcho các giá trị chưa được gán – một loại độc lập có một giá trị duy nhất undefined.
  • 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 xhoặc typeof(x).
  • Trả về một chuỗi với tên của kiểu, như "string".
  • Đối với nulltrả 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.

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!