Các biến javascript được gõ.
Javascript là ngôn ngữ được nhập động, có nghĩa là các loại biến được xác định trong thời gian chạy (được thực hiện hoàn toàn bởi trình thông dịch), không giống như các ngôn ngữ được nhập tĩnh (như Java và C++), trong đó nhà phát triển phải xác định rõ ràng loại cho từng biến được khai báo Show
Là một nhà phát triển Javascript, hiểu rõ về các loại sẽ giúp bạn có cái nhìn toàn diện về ngôn ngữ và giúp bạn tự tin hơn với tư cách là một nhà phát triển Javascript GIỚI THIỆUTrong một ngôn ngữ lập trình, các giá trị có thể được biểu diễn và thao tác được gọi là các kiểu. Các loại là các nhãn được gán cho dữ liệu để cho phép máy tính hiểu được dữ liệu đó (ở cấp độ thấp, máy tính xem mọi thứ là dữ liệu (1 và 0)) Một trong những đặc điểm cốt lõi của bất kỳ ngôn ngữ lập trình nào là có một tập hợp các loại mà ngôn ngữ đó hỗ trợ. Có hai loại loại trong Javascript. kiểu nguyên thủy và kiểu đối tượng Trong bài viết này, độc giả sẽ tìm hiểu những điều sau đây
NGÔN NGỮ KIỂU TĨNH VÀ ĐỘNGTrong một ngôn ngữ lập trình, một biến giống như một thùng chứa rỗng, theo nghĩa nó được sử dụng để lưu trữ các loại giá trị khác nhau Trong một ngôn ngữ được nhập tĩnh, loại giá trị có thể được lưu trữ trong một biến được nhà phát triển xác định rõ ràng. Trong ngôn ngữ được nhập động như Javascript, loại được trình thông dịch ngầm đặt trong thời gian chạy LOẠI VS GIÁ TRỊ TRONG JAVASCRIPTTheo Đặc tả Javascript
Câu lệnh trước có nghĩa là mỗi loại Javascript có (các) loại giá trị cụ thể mà nó chấp nhận. Ví dụ: các loại hình thể thao khác nhau có các quy tắc cụ thể của riêng chúng). Cũng giống như cách bạn không thể ghi điểm vào rổ (luật bóng rổ) trong bóng đá, giá trị 7 không thể được lưu trữ dưới dạng loại 8 trong JavascriptLOẠI NGUYÊN TẮCTrong Javascript, Primitive type là kiểu dữ liệu có giá trị bất biến Javascript có các loại nguyên thủy sau (MDN)
Các loại nguyên thủy xuất hiện trong Javascript dưới dạng giá trị bằng chữ
hoặc dưới dạng các thể hiện đối tượng của Trình tạo của chúng - mặc dù các thể hiện đối tượng này hiếm khi được sử dụng
không có giá trị (MDN)Theo Đặc tả Javascript 9 là một giá trị nguyên thủy đại diện cho sự vắng mặt có chủ ý của bất kỳ giá trị đối tượng nào Null là một từ khóa Javascript thường được sử dụng để biểu thị sự vắng mặt của một giá trị. Null được coi là thành viên duy nhất của loại của nó (kiểu Null) và nó có thể được sử dụng để biểu thị “không có giá trị” cho các chuỗi và số cũng như các đối tượng Khi toán tử 0 được sử dụng trên null, chuỗi “đối tượng” được trả về. Đây thực sự là một sai lầm trong quá trình triển khai Javascript ban đầu. Nên sử dụng toán tử nghiêm ngặt 1 thay vì 0 khi kiểm tra loại giá trị nullNull cũng có thể được coi là một giá trị đối tượng đặc biệt biểu thị “không có đối tượng” Ví dụ
Trong đoạn mã trước, biến 3 được gán giá trị null sau khi ban đầu nó được gán cho một đối tượng. Giá trị null có nghĩa là một đối tượng dự kiến sẽ được gán cho một biến, nhưng nó không được gán vì một lý do nào đó. Đây cũng là trường hợp khi 4 trả về giá trị nullkhông xác định (MDN)Không xác định được sử dụng để biểu thị sự vắng mặt của một giá trị trong JavaScript, giống như 9Một giá trị không xác định được trả về
Giá trị không xác định là thành viên duy nhất của loại Không xác định Toán tử đẳng thức 6 coi 7 và 9 là bằng nhau. 9 Sử dụng toán tử đẳng thức chặt chẽ 1 để phân biệt chúng. 71Boolean (MDN)Theo Đặc tả Javascript
Booleans chỉ đơn giản là các giá trị 72 và 73 của JavaScriptJavaScript cũng có thể hoàn toàn chuyển đổi các loại giá trị khác thành boolean (giá trị thật và giả) Tìm hiểu thêm về kiểu Boolean tại đây Chuỗi (MDN)Kiểu String dùng để biểu diễn văn bản trong Javascript. Tuy nhiên, giá trị chuỗi là một chuỗi bất biến gồm các giá trị 16 bit, mỗi giá trị đại diện cho một ký tự Unicode Những điều quan trọng cần biết về chuỗi
Tìm hiểu thêm về Chuỗi tại đây Loại số (MDN)Các kiểu số được sử dụng để biểu diễn các số trong Javascript Có hai loại số trong Javascript
Loại sốĐây là kiểu số chính của Javascript. Một giá trị số có thể ở dạng số nguyên ( 77) hoặc số dấu phẩy động ( 78). 79 và 60 cũng được coi là giá trị số trong Javascript. Giá trị 79 (Không phải là Số) về mặt kỹ thuật là một giá trị không phải là số mà một câu lệnh có thể ước tính. Tuy nhiên, giá trị 60 đại diện cho vô cực toán học (số lớn hơn số tự nhiên). Cả hai đều là hằng số toàn cục (thuộc tính của đối tượng toàn cục. e. g. , đối tượng 63 trong trình duyệt)Tìm hiểu thêm về kiểu Number tại đây Loại BigIntLoại BigInt đã được thêm vào trong ECMAScript10 (ES10). Nó là một kiểu số có giá trị là số nguyên. Nó được đưa vào JavaScript chủ yếu để cho phép biểu diễn các số nguyên 64 bit, được yêu cầu để tương thích với các ngôn ngữ lập trình và API khác Trước ES10, giá trị số tối đa được tạo trong Javascript sử dụng số bằng chữ hoặc hàm tạo 64 và được lưu trữ trong 65, tương đương với 66. Tuy nhiên, với kiểu BigInt, chúng ta có thể chỉ định các số lớn hơn 65. Các giá trị BigInt có thể có hàng nghìn hoặc thậm chí hàng triệu chữ sốGiá trị 68 có thể được tạo bằng cách sử dụng hàm 69 hoặc nối thêm 60 vào cuối giá trị số nguyênThí dụ 7Tìm hiểu thêm về BigInt tại đây Ký hiệu (MDN)Biểu tượng là một loại dữ liệu duy nhất và không thay đổi được giới thiệu trong ECMAScript6 (ES6) để dùng làm tên thuộc tính không phải chuỗi cho các đối tượng. Trước ES6, tên thuộc tính của các đối tượng trong Javascript chỉ có thể là chuỗi, nhưng với kiểu Ký hiệu, chúng ta cũng có thể chỉ định tên thuộc tính là Ký hiệu Không thể đếm được các biểu tượng, đó là lý do không thể truy cập biểu tượng bằng phương thức 61 trên một đối tượng sử dụng nó làm khóaTạo biểu tượngHàm 62 toàn cầu 6Trong đoạn mã trước, ký hiệu 63 được tạo bằng cách sử dụng hàm 62 và được sử dụng để gán một thuộc tính mới cho đối tượng 65. Hàm Biểu tượng cũng chấp nhận một đối số tùy chọn là mô tả của biểu tượng. Tuy nhiên, không thể sử dụng mô tả để truy cập vào thuộc tính và cách tốt nhất là luôn cung cấp mô tả để giúp việc đọc và gỡ lỗi dễ dàng hơn 6Biểu tượng luôn là duy nhấtMỗi Biểu tượng là duy nhất; 5Trong mã trước đó, hai Biểu tượng giống hệt nhau, 66 và 67, được tạo; . Tìm hiểu thêm về Ký hiệu tại đâyPhát lại phiên mã nguồn mởOpenReplay là bộ phát lại phiên mã nguồn mở cho phép bạn xem những gì người dùng làm trên ứng dụng web của bạn, giúp bạn khắc phục sự cố nhanh hơn. OpenReplay tự lưu trữ để kiểm soát hoàn toàn dữ liệu của bạn Bắt đầu tận hưởng trải nghiệm sửa lỗi của bạn - bắt đầu sử dụng OpenReplay miễn phí LOẠI ĐỐI TƯỢNGTheo Đặc tả JavaScript
Một Đối tượng có thể được coi là một giá trị tổng hợp, được tạo thành từ nhiều giá trị (giá trị nguyên thủy và các đối tượng khác), đồng thời cho phép bạn lưu trữ và truy xuất các giá trị theo tên. Các giá trị được thu thập bởi một đối tượng được gọi là thuộc tính Thuộc tính đối tượngThuộc tính của đối tượng (giá trị thuộc tính) là phần cốt lõi của bất kỳ đối tượng nào và nó được tạo thành từ tên (khóa) và giá trị. Tên thuộc tính thường là các chuỗi (chúng cũng có thể là Ký hiệu) được ánh xạ tới một giá trị Các loại thuộc tính đối tượngCó hai thuộc tính đối tượng. Thuộc tính dữ liệu và thuộc tính truy cập Thuộc tính dữ liệuKhi một đối tượng được viết như thế này — 8Trong đoạn mã trước, các thuộc tính 68 và 69 của đối tượng 50 được gọi là Thuộc tính dữ liệu. Đây là cách mặc định để tạo các thuộc tính đối tượng trong JavaScript (Như đã thấy trong hầu hết các mã Javascript)Thuộc tính người truy cậpThuộc tính bộ truy cập là tổng hợp của hai hàm. hàm 51 và hàm 52. Nó liên kết một tên thuộc tính (khóa) với hai hàm truy cập ( 51 và 52) để tìm nạp hoặc lưu trữ một giá trịThí dụ 6Trong đoạn mã trước, thuộc tính 68 được tạo và truy xuất từ cả 56 và 50. Tuy nhiên, cú pháp được sử dụng để tạo thuộc tính 68 trong đối tượng 56 là khác. Từ khóa 51 được theo sau bởi một khai báo hàm với tên thuộc tính (i. e. 68) trả về giá trị thuộc tính (“nhà văn”)Cú pháp truy xuất các thuộc tính của trình truy cập và thuộc tính dữ liệu là giống nhau, bất kể các thuộc tính được tạo như thế nào
Hàm 51 được gọi là getter vì nó được sử dụng để lấy giá trị của thuộc tính đối tượng. nếu 56 được cập nhật như thế này 86, bản cập nhật sẽ không hoạt động. Điều này là do chúng ta cần một hàm setter tương ứng cho thuộc tính 68. Các hàm setter được sử dụng để đặt các giá trị trong một đối tượng truy cập 0Trong đoạn mã trước, 56 hiện có cả chức năng 89 và 60. Hàm setter hiện có thể cập nhật giá trị thuộc tính 68Mô tả thuộc tính đối tượng và thuộc tínhMột bộ mô tả thuộc tính đối tượng là một giá trị tổng hợp. Nó tổng hợp nhiều giá trị được gọi là thuộc tính thuộc tính xác định siêu dữ liệu của giá trị được liên kết với một khóa trong một đối tượng. Nó chỉ đơn giản xác định giá trị của một thuộc tính đối tượng sẽ trông như thế nào thông qua các thuộc tính thuộc tính sau
Ký hiệu ____562 được sử dụng vì chúng là thuộc tính bên trong. Thuộc tính nội bộ là thuộc tính được sử dụng bởi các thông số kỹ thuật ECMAScript (có nghĩa là chúng không được hiển thị trực tiếp như hầu hết các thuộc tính). Để sửa đổi các thuộc tính bên trong, chúng tôi sử dụng các phương thức đặc biệt do Javascript cung cấp Trong sơ đồ trước, bộ mô tả thuộc tính của 63 chứa các thuộc tính thuộc tính khác nhau của thuộc tính 64 và 65object`)Tìm hiểu thêm về bộ mô tả thuộc tính và thuộc tính tại đây Các đối tượng tích hợp (MDN)Bạn nên biết chúng là gì từ các đối tượng 'tích hợp' tên. Đối tượng tích hợp đơn giản là các đối tượng đi kèm với Javascript theo mặc định, cho phép bạn triển khai các chức năng khác nhau trong ứng dụng của mình Có nhiều đối tượng tích hợp khác nhau (kiểm tra tại đây), nhưng trong bài viết này, chúng ta sẽ xem xét các đối tượng sau
Đối tượng cơ bảnTheo định nghĩa của MDN
Thí dụ. Khi bạn tạo một “đối tượng bình thường” 0Số và Ngày
Hãy nhìn vào đối tượng toán học. Đối tượng 66 cho phép chúng tôi thực hiện các phép toán trong Javascript, thông qua các phương thức và thuộc tính khác nhau của nóVí dụ, nếu chúng ta muốn tìm căn bậc hai của một số, chúng ta sẽ sử dụng phương pháp 67 1Xử lý văn bảnCác đối tượng này đại diện cho các chuỗi và hỗ trợ thao tác với chúng. Chuỗi và RegExp Bộ sưu tập được lập chỉ mục. Mảng và Mảng đã gõMảng là các đối tượng thông thường với các thuộc tính có khóa số nguyên. Nó là một tập hợp có thứ tự các giá trị. Mỗi giá trị được gọi là một phần tử và mỗi phần tử có một vị trí số trong mảng, được gọi là chỉ mục của nó. Một mảng cũng có thuộc tính 68 có thể được sử dụng để truy xuất số lượng phần tử có trong một mảngThí dụ 2Typed Arrays được giới thiệu trong ES6, chủ yếu được thiết kế để hoạt động với các kiểu số. Các mảng đã nhập về mặt kỹ thuật không phải là mảng (_______569 trả về 73 cho chúng), nhưng các phương thức mảng thông thường có thể được sử dụng trên chúngSự khác biệt giữa Mảng đã nhập và Mảng là
11 loại Số sau đây có thể được lưu trữ và thao tác trong Mảng được nhập ConfructorNumeric typeInt8Array () đã ký bytesuint8array () không dấu bytesuint8clampedArray () byte không dấu . số Javascript thông thườngBộ sưu tập có khóaTheo MDN
GIÁ TRỊ NGUYÊN TẮC VÀ THAM CHIẾUKhi một biến được gán một giá trị của Loại nguyên thủy Javascript, thì biến đó được cho là chứa một giá trị nguyên thủy. Tuy nhiên, nếu một Đối tượng (đối tượng thông thường, mảng và hàm) được gán làm giá trị cho một biến, thì biến đó được cho là chứa giá trị tham chiếu của Đối tượng Công cụ Javascript lưu trữ các giá trị khác nhau trong bộ nhớ—ngăn xếp và đống Bộ nhớ ngăn xếp và đốngNgăn xếp và đống là hai vị trí bộ nhớ nơi các biến được lưu trữ khi chúng được khai báo trong JavaScript. Chúng tôi sẽ sử dụng ngăn xếp và đống để hiểu rõ hơn về các giá trị nguyên thủy và tham chiếu, đặc biệt là cách chúng được lưu trữ dưới dạng dữ liệu tĩnh và động trên ngăn xếp và đống tương ứng Vì lý do hiệu suất, các giá trị nguyên thủy và giá trị tham chiếu được lưu trữ dưới dạng dữ liệu tĩnh (dữ liệu có kích thước cố định) trên ngăn xếp. Ngược lại, các Đối tượng được lưu trữ dưới dạng dữ liệu động trên heap (giá trị tham chiếu đối tượng được lưu trữ trên ngăn xếp) do tính linh hoạt của bộ nhớ của heap Ví dụ 3Ở đoạn code trước, vì giá trị gốc của 7 và 03 được lưu trữ trong biến 04 và 05 nên các biến sẽ được Javascript lưu trữ trên ngăn xếpBây giờ hãy tạo một đối tượng sẽ được lưu trữ trên heap 4Trong sơ đồ trước, Javascript gán bộ nhớ trên ngăn xếp cho ba biến 04, 05 và 08. Một đối tượng mới cũng được tạo trong bộ nhớ heap được liên kết với biến 08 trên ngăn xếp. Do liên kết giữa biến 08 và đối tượng trên bộ nhớ heap, chúng ta nói rằng biến 08 lưu trữ giá trị tham chiếu của đối tượng trên bộ nhớ heapSao chép các giá trị nguyên thủyKhi một giá trị nguyên thủy được gán từ biến này sang biến khác bằng toán tử 02, giá trị đó được cho là đã được sao chép sang biến mớiThí dụ 5Trong đoạn mã trước
Về cơ bản, Javascript tạo một bản sao của giá trị nguyên thủy “John” và gán nó cho biến 04. Sao chép giá trị tham chiếuKhi một giá trị tham chiếu của một đối tượng được gán từ biến này sang biến khác, cả hai biến sẽ tham chiếu đến cùng một đối tượng trên bộ nhớ heap. Điều này có nghĩa là những thay đổi được thực hiện đối với một biến sẽ ảnh hưởng đến biến khác Thí dụ 6Trong đoạn mã trước
Như bạn đã biết, các biến 08 và 11 tham chiếu cùng một đối tượng, vì vậy những thay đổi được thực hiện đối với đối tượng thông qua biến 11 cũng được phản ánh trong biến 08PHẦN KẾT LUẬNBây giờ bạn đã biết về các loại và các giá trị khác nhau của chúng trong Javascript, bạn sẽ nhận thức rõ hơn về cách bạn sử dụng các loại và giá trị khác nhau khi sử dụng Javascript JavaScript được gõ tĩnh hay độngNgôn ngữ được nhập động là những ngôn ngữ (như JavaScript) mà trình thông dịch gán cho biến một loại trong thời gian chạy dựa trên giá trị của biến tại thời điểm đó.
Các biến JavaScript có động khôngJavascript là ngôn ngữ gõ động . Khi bạn khai báo một biến, bạn không cần chỉ định biến đó là kiểu gì. Công cụ Javascript suy ra loại biến này dựa trên giá trị được gán vào thời gian chạy.
TypeScript được gõ tĩnh hay độngTrong bài viết này, chúng ta sẽ khám phá cách nhập tĩnh trong TypeScript và điều gì làm cho ngôn ngữ được nhập tĩnh tùy chọn . TypeScript là một ngôn ngữ lập trình được gõ mạnh dựa trên JavaScript.
Tại sao JavaScript là độngJavaScript được gọi là ngôn ngữ động bởi vì nó không chỉ có một vài khía cạnh động, mà gần như mọi thứ đều động . Tất cả các biến là động (cả về loại và sự tồn tại) và thậm chí mã là động. Bạn có thể tạo các biến mới trong thời gian chạy và loại biến được xác định trong thời gian chạy. |