Giá trị nguyên thuỷ và tham chiếu của ECMAScript

Trong ECMAScript, biến có thể tồn tại hai loại giá trị, đó là giá trị cội và giá trị tham chiếu.

Giá trị cội và giá trị tham chiếu

Trong ECMAScript, biến có thể tồn tại hai loại giá trị, đó là giá trị cội và giá trị tham chiếu.

Giá trị cội
Đoạn dữ liệu đơn giản lưu trữ trong đống,也就是说, giá trị của chúng được lưu trữ trực tiếp trong vị trí truy cập biến.
Giá trị tham chiếu
Đối tượng lưu trữ trong đống,也就是说, giá trị được lưu trữ trong biến là một con trỏ (point), chỉ đến vị trí lưu trữ đối tượng trong đống.

Khi gán giá trị cho biến, trình giải thích của ECMAScript phải xác định giá trị này là loại dữ liệu cội hay loại dữ liệu tham chiếu. Để thực hiện điều này, trình giải thích cần thử xác địnhGiá trị này có phải là một loại dữ liệu cội của ECMAScript hay khôngtức là Undefined, Null, Boolean, Number và String. Do không gian mà các loại dữ liệu cội này chiếm là cố định, vì vậy bạn có thể lưu trữ chúng trong một không gian bộ nhớ nhỏ hơn - đống. Điều này giúp tra cứu giá trị của biến nhanh chóng.

Trong nhiều ngôn ngữ, chuỗi thường được coi là loại dữ liệu tham chiếu, không phải là loại dữ liệu cội, vì kích thước của chuỗi có thể thay đổi. ECMAScript đã phá vỡ truyền thống này.

Nếu một giá trị là loại dữ liệu tham chiếu, không gian lưu trữ của nó sẽ được phân phối từ đống. Do kích thước của giá trị tham chiếu có thể thay đổi, vì vậy không thể đặt nó vào đống, điều này sẽ làm giảm tốc độ tra cứu biến. Ngược lại, giá trị được lưu trữ trong không gian đống của biến là địa chỉ của đối tượng được lưu trữ trong đống. Kích thước của địa chỉ là cố định, vì vậy việc lưu trữ nó trong đống không có bất kỳ tác động tiêu cực nào đến hiệu suất của biến. Hình ảnh sau đây thể hiện:

Giá trị và tham chiếu nguyên bản lưu trữ trong đống và ngăn xếp

Loại dữ liệu cội

Như đã đề cập, ECMAScript có 5 loại dữ liệu cội (primitive type), đó là Undefined, Null, Boolean, Number và String. ECMA-262 sử dụng thuật ngữLoại (type)Định nghĩa là một tập hợp giá trị, mỗi loại dữ liệu cội định nghĩa khoảng giá trị mà nó chứa và hình thức biểu diễn văn bản của nó.

ECMAScript cung cấp toán tử typeof để xác định một giá trị có phải thuộc một loại nào đó hay không. Bạn có thể sử dụng toán tử này để xác định một giá trị có phải là một loại dữ liệu cội hay không: nếu nó là loại dữ liệu cội, bạn còn có thể xác định loại dữ liệu cội mà nó đại diện.

Trong các chương sau, chúng tôi sẽ giải thích sâu hơn về các loại dữ liệu cội và loại tham chiếu của ECMAScript.