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
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ỆU
Trong 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
- Sự khác biệt giữa ngôn ngữ kiểu động và kiểu tĩnh
- Sự khác biệt giữa một loại và một giá trị trong Javascript
- Các loại và giá trị nguyên thủy
- Loại đối tượng
- Thuộc tính đối tượng khác nhau
- Bộ mô tả và thuộc tính thuộc tính đối tượng
- Các đối tượng Javascript tích hợp
- Sự khác biệt giữa Mảng và Mảng đã nhập [Bộ sưu tập được lập chỉ mục]
- Cách sao chép các giá trị nguyên thủy và tham chiếu
- Cách ngăn xếp Javascript và bộ nhớ heap hoạt động với các giá trị nguyên thủy và tham chiếu
NGÔN NGỮ KIỂU TĨNH VÀ ĐỘNG
Trong 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 JAVASCRIPT
Theo Đặc tả Javascript
Loại ngôn ngữ ECMAScript tương ứng với các giá trị được lập trình viên ECMAScript thao tác trực tiếp bằng ngôn ngữ ECMAScript. Các loại ngôn ngữ ECMAScript là Undefined, Null, Boolean, String, Symbol, Number, BigInt và Object. Giá trị ngôn ngữ ECMAScript là giá trị được đặc trưng bởi loại ngôn ngữ ECMAScript
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ị
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
7 không thể được lưu trữ dưới dạng loại new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
8 trong JavascriptLOẠI NGUYÊN TẮC
Trong 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]
- vô giá trị
- chưa xác định
- Booleans
- Dây
- Các loại số [Number và BigInt]
- ký hiệu
Các loại nguyên thủy xuất hiện trong Javascript dưới dạng giá trị bằng chữ
2
4
6
8
10
true;
"good";
3.14;
null;
undefined;
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
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
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àonew Boolean [false]; //object new String ["happy"]; // object new Number [22]; // object
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ử
let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
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 let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
1 thay vì let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
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ụ
let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
Trong đoạn mã trước, biến
let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
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 let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
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ư
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
9Một giá trị không xác định được trả về
- Khi một biến chưa được khởi tạo
- Khi bạn cố gắng truy cập thuộc tính đối tượng hoặc phần tử mảng không tồn tại
- Khi các chức năng không trả về một giá trị rõ ràng
- Khi một giá trị không được chuyển đến một tham số chức năng, giá trị của tham số sẽ trở thành không xác định
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
let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
6 coi let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
7 và new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
9 là bằng nhau. let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
9 Sử dụng toán tử đẳng thức chặt chẽ let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
1 để phân biệt chúng. new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
71Boolean [MDN]
Theo Đặc tả Javascript
Kiểu Boolean đại diện cho một thực thể logic có hai giá trị, được gọi là true và false
Booleans chỉ đơn giản là các giá trị
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
72 và new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
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
- Chuỗi Javascript [và mảng] sử dụng lập chỉ mục dựa trên số không. giá trị 16 bit đầu tiên nằm ở chỉ mục
74, chỉ số tiếp theo lànew Boolean [false]; //object new String ["happy"]; // object new Number [22]; // object
75, v.v.new Boolean [false]; //object new String ["happy"]; // object new Number [22]; // object
- Độ dài của một chuỗi là số giá trị 16 bit mà nó chứa
- Trong ES6+, chuỗi có thể lặp lại, có thể sử dụng
76 trên chuỗinew Boolean [false]; //object new String ["happy"]; // object new Number [22]; // object
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ố
- Loại BigInt
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 [
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
77] hoặc số dấu phẩy động [new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
78]. new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
79 và 2
4
6
8
10
true;
"good";
3.14;
null;
undefined;
60 cũng được coi là giá trị số trong Javascript. Giá trị new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
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ị 2
4
6
8
10
true;
"good";
3.14;
null;
undefined;
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 2
4
6
8
10
true;
"good";
3.14;
null;
undefined;
63 trong trình duyệt]Tìm hiểu thêm về kiểu Number tại đây
Loại BigInt
Loạ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
2
4
6
8
10
true;
"good";
3.14;
null;
undefined;
64 và được lưu trữ trong 2
4
6
8
10
true;
"good";
3.14;
null;
undefined;
65, tương đương với 2
4
6
8
10
true;
"good";
3.14;
null;
undefined;
66. Tuy nhiên, với kiểu BigInt, chúng ta có thể chỉ định các số lớn hơn 2
4
6
8
10
true;
"good";
3.14;
null;
undefined;
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ị
2
4
6
8
10
true;
"good";
3.14;
null;
undefined;
68 có thể được tạo bằng cách sử dụng hàm 2
4
6
8
10
true;
"good";
3.14;
null;
undefined;
69 hoặc nối thêm new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
60 vào cuối giá trị số nguyênThí dụ
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
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
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
61 trên một đối tượng sử dụng nó làm khóaTạo biểu tượng
Hàm
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
62 toàn cầu2
4
6
8
10
true;
"good";
3.14;
null;
undefined;
6Trong đoạn mã trước, ký hiệu
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
63 được tạo bằng cách sử dụng hàm new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
62 và được sử dụng để gán một thuộc tính mới cho đối tượng new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
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ơnnew Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
6Biểu tượng luôn là duy nhất
Mỗi Biểu tượng là duy nhất;
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
5Trong mã trước đó, hai Biểu tượng giống hệt nhau,
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
66 và new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
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ƯỢNG
Theo Đặc tả JavaScript
Một đối tượng về mặt logic là một tập hợp các thuộc tính
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ượng
Thuộ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ượng
Có 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ệu
Khi một đối tượng được viết như thế này —
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
8Trong đoạn mã trước, các thuộc tính
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
68 và new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
69 của đối tượng new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
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ập
Thuộc tính bộ truy cập là tổng hợp của hai hàm. hàm
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
51 và hàm new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
52. Nó liên kết một tên thuộc tính [khóa] với hai hàm truy cập [new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
51 và new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
52] để tìm nạp hoặc lưu trữ một giá trịThí dụ
let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
6Trong đoạn mã trước, thuộc tính
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
68 được tạo và truy xuất từ cả new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
56 và new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
50. Tuy nhiên, cú pháp được sử dụng để tạo thuộc tính new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
68 trong đối tượng new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
56 là khác. Từ khóa new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
51 được theo sau bởi một khai báo hàm với tên thuộc tính [i. e. new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
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
82new Boolean [false]; //object new String ["happy"]; // object new Number [22]; // object
83new Boolean [false]; //object new String ["happy"]; // object new Number [22]; // object
Hàm
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
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 new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
56 được cập nhật như thế này new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
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 new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
68. Các hàm setter được sử dụng để đặt các giá trị trong một đối tượng truy cậplet greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
0Trong đoạn mã trước,
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
56 hiện có cả chức năng new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
89 và let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
60. Hàm setter hiện có thể cập nhật giá trị thuộc tính new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
68Mô tả thuộc tính đối tượng và thuộc tính
Mộ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
- [[Giá trị]]
- [[Lấy]]
- [[Bộ]]
- [[Có thể ghi]]
- [[Vô số]]
- [[Có thể định cấu hình]]
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
let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
63 chứa các thuộc tính thuộc tính khác nhau của thuộc tính let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
64 và let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
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ản
Số và Ngày
Xử lý văn bản
Bộ sưu tập được lập chỉ mục
Bộ sưu tập có khóa
Đối tượng cơ bản
Theo định nghĩa của MDN
Đây là những đối tượng cơ bản, cơ bản mà tất cả các đối tượng khác dựa trên. Điều này bao gồm các đối tượng chung, booleans, hàm và ký hiệu
Thí dụ. Khi bạn tạo một “đối tượng bình thường”
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
0Số và Ngày
Đây là những đối tượng cơ sở đại diện cho số, ngày tháng và phép tính toán học. - MDN
- Con số
- BigInt
- môn Toán
- Ngày
Hãy nhìn vào đối tượng toán học. Đối tượng
let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
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
let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
67new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
1Xử lý văn bản
Cá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
let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
68 có thể được sử dụng để truy xuất số lượng phần tử có trong một mảngThí dụ
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
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ề
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
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à
- Các phần tử của một mảng đã nhập đều là số, nhưng không phải là số Javascript thông thường [sử dụng định dạng độ chính xác kép 64 bit]. trong các mảng đã nhập, bạn có thể chỉ định loại số ưa thích của mình [số nguyên có dấu và không dấu và số dấu phẩy động IEEE-754] và kích thước của nó [8 bit đến 64 bit] mà bạn muốn lưu trữ trong mảng
- Các mảng đã nhập có độ dài cố định;
- Các phần tử của mảng đã nhập luôn được khởi tạo thành
74 khi mảng được tạonew Boolean [false]; //object new String ["happy"]; // object new Number [22]; // object
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óa
Theo MDN
Các đối tượng này đại diện cho các bộ sưu tập sử dụng các khóa. Các bộ sưu tập có thể lặp lại [Bản đồ và Tập hợp] chứa các phần tử dễ dàng lặp lại theo thứ tự chèn
Bản đồ
Bộ
Bản đồ yếu
Bộ yếu
GIÁ TRỊ NGUYÊN TẮC VÀ THAM CHIẾU
Khi 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à đống
Ngă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ụ
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
3Ở đoạn code trước, vì giá trị gốc của
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
7 và let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
03 được lưu trữ trong biến let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
04 và let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
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
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
4Trong sơ đồ trước, Javascript gán bộ nhớ trên ngăn xếp cho ba biến
let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
04, let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
05 và let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
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 let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
08 trên ngăn xếp. Do liên kết giữa biến let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
08 và đối tượng trên bộ nhớ heap, chúng ta nói rằng biến let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
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ủy
Khi 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ử
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
02, giá trị đó được cho là đã được sao chép sang biến mớiThí dụ
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
5Trong đoạn mã trước
- Một biến mới
03 được khai báo và khởi tạo với giá trị là “John”new Boolean [false]; //object new String ["happy"]; // object new Number [22]; // object
- Tiếp theo, biến
04 được khai báo và biếnnew Boolean [false]; //object new String ["happy"]; // object new Number [22]; // object
03 được gán làm giá trị của nónew Boolean [false]; //object new String ["happy"]; // object new Number [22]; // object
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
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
04. Sao chép giá trị tham chiếu
Khi 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ụ
new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
6Trong đoạn mã trước
- Đầu tiên, một biến
08 được khai báo và khởi tạo với một đối tượng có hai thuộc tính làlet greetingObject = { english: 'hello', french: 'bonjour' } let greetingObject = null; //no object
04 vàlet greetingObject = { english: 'hello', french: 'bonjour' } let greetingObject = null; //no object
05let greetingObject = { english: 'hello', french: 'bonjour' } let greetingObject = null; //no object
- Thứ hai, biến
08 được gán cho biếnlet greetingObject = { english: 'hello', french: 'bonjour' } let greetingObject = null; //no object
11. Hai biến bây giờ tham chiếu cùng một đối tượng trong bộ nhớnew Boolean [false]; //object new String ["happy"]; // object new Number [22]; // object
- Cuối cùng, biến
11 thay đổi thuộc tínhnew Boolean [false]; //object new String ["happy"]; // object new Number [22]; // object
05 của đối tượng trên bộ nhớ heap từlet greetingObject = { english: 'hello', french: 'bonjour' } let greetingObject = null; //no object
14 thànhnew Boolean [false]; //object new String ["happy"]; // object new Number [22]; // object
15new Boolean [false]; //object new String ["happy"]; // object new Number [22]; // object
Như bạn đã biết, các biến
let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
08 và new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
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 new Boolean [false]; //object
new String ["happy"]; // object
new Number [22]; // object
11 cũng được phản ánh trong biến let greetingObject = {
english: 'hello',
french: 'bonjour'
}
let greetingObject = null; //no object
08PHẦN KẾT LUẬN
Bâ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