JavaScript không có loại?

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

  • alert( 1 / 0 ); // Infinity
    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ào

    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

    let n = 123;
    n = 12.345;
    1

  • alert( 1 / 0 ); // Infinity
    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ạn

    let n = 123;
    n = 12.345;
    3

    alert( 1 / 0 ); // Infinity
    3 là dính. Bất kỳ phép toán nào khác trên
    alert( 1 / 0 ); // Infinity
    3 đều trả về
    alert( 1 / 0 ); // Infinity
    3

    let n = 123;
    n = 12.345;
    7

    Vì vậy, nếu có một

    alert( 1 / 0 ); // Infinity
    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 đó.
    let n = 123;
    n = 12.345;
    10 là
    let n = 123;
    n = 12.345;
    11)

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
3

Cá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ố âm

Thự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;
7

Vì 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ây

Loạ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ên

let n = 123;
n = 12.345;
3

Vì 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 một chương riêng cho chúng BigInt. Đọc nó khi bạn cần những con số lớn như vậy

Nhữ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 IE

Bạ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;
6

Trong JavaScript, có 3 loại trích dẫn

  1. Dấu ngoặc kép.
    let n = 123;
    n = 12.345;
    35
  2. Dấu nháy đơn.
    let n = 123;
    n = 12.345;
    36
  3. đánh dấu ngược.
    let n = 123;
    n = 12.345;
    37

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ạn

let n = 123;
n = 12.345;
1

Biể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ơn

Xin 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;
0

Chú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;
74

Loạ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;
1

Giá trị Boolean cũng là kết quả của sự so sánh

let n = 123;
n = 12.345;
2

Chú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ên

Nó tạo thành một loại riêng biệt chỉ chứa giá trị

let n = 123;
n = 12.345;
77

let n = 123;
n = 12.345;
3

Trong JavaScript,

let n = 123;
n = 12.345;
77 không phải là “tham chiếu đến một đối tượng không tồn tại” hay “con trỏ null” 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ì”, “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 định

Giá 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;
71

let n = 123;
n = 12.345;
4

Về mặt kỹ thuật, có thể gán rõ ràng

let n = 123;
n = 12.345;
71 cho một biến

let 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án

Loại

let n = 123;
n = 12.345;
78 là đặc biệt

Tấ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ượng

Toá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 nhanh

Một cuộc gọi đến

let n = 123;
n = 12.345;
31 trả về một chuỗi có tên loại

let n = 123;
n = 12.345;
6

Ba dòng cuối cùng có thể cần giải thích thêm

  1. let n = 123;
    n = 12.345;
    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ượng
  2. Kết quả của
    let n = 123;
    n = 12.345;
    33 là
    let n = 123;
    n = 12.345;
    34. Đó là một lỗi được công nhận chính thức trong
    let 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ủa
    let n = 123;
    n = 12.345;
    30 là sai ở đây
  3. Kết quả của
    let n = 123;
    n = 12.345;
    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ưng
    let n = 123;
    n = 12.345;
    30 đối xử với họ khác đi, trả lại
    let 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ế

Cú pháp

let n = 123;
n = 12.345;
63

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ọc

Thô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ày

Mộ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ều

Có 8 kiểu dữ liệu cơ bản trong JavaScript

  • Bảy kiểu dữ liệu nguyên thủy
    • let n = 123;
      n = 12.345;
      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ởi
      let n = 123;
      n = 12.345;
      17
    • let 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ệt
    • let n = 123;
      n = 12.345;
      17 cho
      let n = 123;
      n = 12.345;
      73/
      let n = 123;
      n = 12.345;
      74
    • let 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ất
      let n = 123;
      n = 12.345;
      77
    • let 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ất
      let n = 123;
      n = 12.345;
      71
    • let n = 123;
      n = 12.345;
      79 cho số nhận dạng duy nhất
  • Và một loại dữ liệu không nguyên thủy
    • let n = 123;
      n = 12.345;
      78 cho các cấu trúc dữ liệu phức tạp hơn

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ư
    let n = 123;
    n = 12.345;
    31, nhưng cũng có thể dùng
    let n = 123;
    n = 12.345;
    63
  • Trả về một chuỗi có tên của loại, chẳng hạn như
    let n = 123;
    n = 12.345;
    09
  • Đối với
    let n = 123;
    n = 12.345;
    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ượng

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

JavaScript sẽ bao giờ có các loại?

JavaScript chắc chắn có các loại . typeof 42 == "số" typeof "xin chào" == "chuỗi" typeof {} == "đối tượng"

Kiểu dữ liệu nào không có sẵn trong JavaScript?

Không xác định. Trong JavaScript, một biến không có giá trị, có giá trị không xác định. Loại cũng không xác định