Tham chiếu hoặc giá trị javascript là gì?

Tóm lược. trong hướng dẫn này, bạn sẽ tìm hiểu về hai loại giá trị khác nhau trong JavaScript bao gồm giá trị nguyên thủy và giá trị tham chiếu

JavaScript có hai loại giá trị khác nhau

  • giá trị nguyên thủy
  • Các giá trị tham khảo

Các giá trị nguyên thủy là các phần dữ liệu nguyên tử trong khi các giá trị tham chiếu là các đối tượng có thể bao gồm nhiều giá trị

Bộ nhớ ngăn xếp và đống

Khi bạn khai báo các biến, công cụ JavaScript sẽ phân bổ bộ nhớ cho chúng trên hai vị trí bộ nhớ. ngăn xếp và đống

Dữ liệu tĩnh là dữ liệu có kích thước cố định tại thời điểm biên dịch. Dữ liệu tĩnh bao gồm

  • Các giá trị nguyên thủy (null, không xác định, boolean, số, chuỗi, ký hiệu và BigInt)
  • Các giá trị tham chiếu tham chiếu đến các đối tượng

Vì dữ liệu tĩnh có kích thước không thay đổi, công cụ JavaScript phân bổ một lượng không gian bộ nhớ cố định cho dữ liệu tĩnh và lưu trữ nó trên ngăn xếp

Ví dụ: phần sau khai báo hai biến và khởi tạo giá trị của chúng thành một chuỗi ký tự và một số

let name = 'John'; let age = 25;

Code language: JavaScript (javascript)

Bởi vì name

let name = 'John'; let age = 25; let person = { name: 'John', age: 25, };

Code language: JavaScript (javascript)
0 là các giá trị nguyên thủy, công cụ JavaScript lưu trữ các biến này trên ngăn xếp như trong hình sau

Lưu ý rằng chuỗi là đối tượng trong nhiều ngôn ngữ lập trình, bao gồm Java và C#. Tuy nhiên, chuỗi là giá trị nguyên thủy trong JavaScript

Không giống như ngăn xếp, JavaScript lưu trữ các đối tượng (và hàm) trên heap. Công cụ JavaScript không phân bổ lượng bộ nhớ cố định cho các đối tượng này. Thay vào đó, nó sẽ phân bổ thêm không gian khi cần thiết

Ví dụ sau định nghĩa các biến name,

let name = 'John'; let age = 25; let person = { name: 'John', age: 25, };

Code language: JavaScript (javascript)
0 và

let name = 'John'; let age = 25; let person = { name: 'John', age: 25, };

Code language: JavaScript (javascript)
3

let name = 'John'; let age = 25; let person = { name: 'John', age: 25, };

Code language: JavaScript (javascript)

Bên trong, công cụ JavaScript phân bổ bộ nhớ như trong hình sau

Trong hình này, JavaScript phân bổ bộ nhớ trên ngăn xếp cho ba biến name,

let name = 'John'; let age = 25; let person = { name: 'John', age: 25, };

Code language: JavaScript (javascript)
0 và

let name = 'John'; let age = 25; let person = { name: 'John', age: 25, };

Code language: JavaScript (javascript)
3

Công cụ JavaScript tạo một đối tượng mới trên bộ nhớ heap. Ngoài ra, nó liên kết biến

let name = 'John'; let age = 25; let person = { name: 'John', age: 25, };

Code language: JavaScript (javascript)
3 trên bộ nhớ ngăn xếp với đối tượng trên bộ nhớ heap

Vì điều này, chúng tôi nói rằng biến

let name = 'John'; let age = 25; let person = { name: 'John', age: 25, };

Code language: JavaScript (javascript)
3 là một tham chiếu đề cập đến một đối tượng

thuộc tính động

Giá trị tham chiếu cho phép bạn thêm, thay đổi hoặc xóa thuộc tính bất kỳ lúc nào. Ví dụ

let person = { name: 'John', age: 25, }; // add the ssn property person.ssn = '123-45-6789'; // change the name person.name = 'John Doe'; // delete the age property delete person.age; console.log(person);

Code language: JavaScript (javascript)

đầu ra

{ name: 'John Doe', ssn: '123-45-6789' }

Code language: CSS (css)

Không giống như một giá trị tham chiếu, một giá trị nguyên thủy không thể có thuộc tính. Điều này có nghĩa là bạn không thể thêm thuộc tính vào giá trị nguyên thủy

JavaScript cho phép bạn thêm thuộc tính vào giá trị nguyên thủy. Tuy nhiên, nó sẽ không có hiệu lực. Ví dụ

let name = 'John'; name.alias = 'Knight'; console.log(name.alias); // undefined

Code language: JavaScript (javascript)

đầu ra

undefined

Code language: JavaScript (javascript)

Trong ví dụ này, chúng tôi thêm thuộc tính

let name = 'John'; let age = 25; let person = { name: 'John', age: 25, };

Code language: JavaScript (javascript)
9 vào giá trị nguyên thủy name. Nhưng khi chúng tôi truy cập thuộc tính

let name = 'John'; let age = 25; let person = { name: 'John', age: 25, };

Code language: JavaScript (javascript)
9 thông qua giá trị nguyên thủy name, nó sẽ trả về

let person = { name: 'John', age: 25, }; // add the ssn property person.ssn = '123-45-6789'; // change the name person.name = 'John Doe'; // delete the age property delete person.age; console.log(person);

Code language: JavaScript (javascript)
3

Sao chép giá trị

Khi bạn gán một giá trị nguyên thủy từ một biến này cho một biến khác, công cụ JavaScript sẽ tạo một bản sao của giá trị đó và gán nó cho biến đó. Ví dụ

let age = 25; let newAge = age;

Code language: JavaScript (javascript)

trong ví dụ này

  • Đầu tiên, hãy khai báo một biến mới

    let name = 'John'; let age = 25; let person = { name: 'John', age: 25, };

    Code language: JavaScript (javascript)
    0 và khởi tạo giá trị của nó bằng

    let person = { name: 'John', age: 25, }; // add the ssn property person.ssn = '123-45-6789'; // change the name person.name = 'John Doe'; // delete the age property delete person.age; console.log(person);

    Code language: JavaScript (javascript)
    5
  • Thứ hai, khai báo một biến khác là

    let person = { name: 'John', age: 25, }; // add the ssn property person.ssn = '123-45-6789'; // change the name person.name = 'John Doe'; // delete the age property delete person.age; console.log(person);

    Code language: JavaScript (javascript)
    6 và gán giá trị

    let name = 'John'; let age = 25; let person = { name: 'John', age: 25, };

    Code language: JavaScript (javascript)
    0 cho biến

    let person = { name: 'John', age: 25, }; // add the ssn property person.ssn = '123-45-6789'; // change the name person.name = 'John Doe'; // delete the age property delete person.age; console.log(person);

    Code language: JavaScript (javascript)
    6

Ở phía sau, công cụ JavaScript tạo một bản sao của giá trị gốc

let person = { name: 'John', age: 25, }; // add the ssn property person.ssn = '123-45-6789'; // change the name person.name = 'John Doe'; // delete the age property delete person.age; console.log(person);

Code language: JavaScript (javascript)
5 và gán nó cho biến

let person = { name: 'John', age: 25, }; // add the ssn property person.ssn = '123-45-6789'; // change the name person.name = 'John Doe'; // delete the age property delete person.age; console.log(person);

Code language: JavaScript (javascript)
6

Hình dưới đây minh họa bộ nhớ ngăn xếp sau khi gán

Trên bộ nhớ ngăn xếp,

let person = { name: 'John', age: 25, }; // add the ssn property person.ssn = '123-45-6789'; // change the name person.name = 'John Doe'; // delete the age property delete person.age; console.log(person);

Code language: JavaScript (javascript)
6 và

let name = 'John'; let age = 25; let person = { name: 'John', age: 25, };

Code language: JavaScript (javascript)
0 là các biến riêng biệt. Nếu bạn thay đổi giá trị của một biến, nó sẽ không ảnh hưởng đến biến kia

Ví dụ

let age = 25; let newAge = age; newAge = newAge + 1; console.log(age, newAge);

Code language: JavaScript (javascript)

Khi bạn gán một giá trị tham chiếu từ một biến này cho một biến khác, công cụ JavaScript sẽ tạo một tham chiếu để cả hai biến tham chiếu đến cùng một đối tượng trên bộ nhớ heap. Điều này có nghĩa là nếu bạn thay đổi một biến, nó sẽ ảnh hưởng đến biến khác.

Ví dụ

let person = { name: 'John', age: 25, }; let member = person; member.age = 26; console.log(person); console.log(member);

Code language: JavaScript (javascript)

Làm thế nào nó hoạt động

Đầu tiên, khai báo một biến

let name = 'John'; let age = 25; let person = { name: 'John', age: 25, };

Code language: JavaScript (javascript)
3 và khởi tạo giá trị của nó với một đối tượng có hai thuộc tính name

let name = 'John'; let age = 25; let person = { name: 'John', age: 25, };

Code language: JavaScript (javascript)
0

Thứ hai, gán biến

let name = 'John'; let age = 25; let person = { name: 'John', age: 25, };

Code language: JavaScript (javascript)
3 cho biến

{ name: 'John Doe', ssn: '123-45-6789' }

Code language: CSS (css)
7. Trong bộ nhớ, cả hai biến đều tham chiếu đến cùng một đối tượng, như minh họa trong hình dưới đây

Thứ ba, thay đổi thuộc tính

let name = 'John'; let age = 25; let person = { name: 'John', age: 25, };

Code language: JavaScript (javascript)
0 của đối tượng thông qua biến

{ name: 'John Doe', ssn: '123-45-6789' }

Code language: CSS (css)
7

Vì cả hai biến

let name = 'John'; let age = 25; let person = { name: 'John', age: 25, };

Code language: JavaScript (javascript)
3 và

{ name: 'John Doe', ssn: '123-45-6789' }

Code language: CSS (css)
7 đều tham chiếu đến cùng một đối tượng, nên việc thay đổi đối tượng thông qua biến

{ name: 'John Doe', ssn: '123-45-6789' }

Code language: CSS (css)
7 cũng được phản ánh trong biến

let name = 'John'; let age = 25; let person = { name: 'John', age: 25, };

Code language: JavaScript (javascript)
3

JavaScript có sử dụng tham chiếu không?

Trong Truyền theo tham chiếu, một hàm được gọi bằng cách truyền trực tiếp tham chiếu/địa chỉ của biến làm đối số. Thay đổi đối số bên trong hàm ảnh hưởng đến biến được truyền từ bên ngoài hàm. Trong Javascript, các đối tượng và mảng được truyền theo tham chiếu .

JavaScript có chuyển qua mảng tham chiếu hoặc giá trị không?

Trong JavaScript, mảng và đối tượng tuân theo thuộc tính chuyển qua thuộc tính tham chiếu . Trong Truyền theo tham chiếu, các tham số được truyền dưới dạng đối số không tạo bản sao của chính nó, nó đề cập đến giá trị ban đầu nên những thay đổi được thực hiện bên trong hàm sẽ ảnh hưởng đến giá trị ban đầu.

Giá trị JavaScript là gì?

Giá trị JavaScript là các giá trị bao gồm các giá trị như Boolean, Chuỗi, mảng, số, v.v. . Hành vi của nó giống như các ngôn ngữ lập trình khác vì các giá trị đang sở hữu một số thuộc tính xác định đang được sử dụng theo yêu cầu và môi trường thời gian chạy trong khi thực thi JavaScript.

Các biến có tham chiếu trong JavaScript không?

push(2) thay đổi mảng bằng cách đẩy một mục 2. Vì các biến x và y tham chiếu cùng một mảng nên thay đổi này được phản ánh trong cả hai biến. Ghi chú. để đơn giản, tôi nói rằng các biến chứa các tham chiếu đến các đối tượng. Nhưng nói một cách chính xác thì các biến trong JavaScript giữ các giá trị tham chiếu đến các đối tượng .