Tại sao mảng const có thể được thay đổi trong javascript

Bạn đoán đúng rồi đấy 👍 Chúng ta không thể thay đổi giá trị của một biến hằng sau khi nó đã được khai báo và gán. Đây là thông báo lỗi

error: TS2588 [ERROR]: Cannot assign to 'myName' because it is a constant.
myName = 'Eric';
~~~~~~
at file:///home/runner/WeepyWarlikeVirus/index.ts:2:1
exit status 1

Quy tắc tương tự áp dụng cho kiểu dữ liệu boolean và số

const myAge: number = 34;
const isFemale: boolean = true;
myAge = 23;
isFemale = false;

Nhưng điều gì sẽ xảy ra khi bạn cố gắng thay đổi nội dung của một đối tượng không đổi 🤔 ?

interface Employee {
name: string,
age: number,
isFemale: boolean
}
const john: Employee = {
name: 'John',
age: 30,
isFemale: false
};
john.age = john.age + 1;
console.log[john];

Nếu bạn đoán rằng đoạn mã trên thực thi thành công, thì bạn đã đúng 😃. Nhưng tại sao?

Điều này liên quan đến cách các biến được lưu trữ bên trong bộ nhớ. Các giá trị của biến boolean, chuỗi và số được lưu trữ trong vị trí bộ nhớ được gán cho các biến đó. Tuy nhiên, khi một biến đối tượng được tạo, thì nội dung của đối tượng đó được tạo trong một phần khác của bộ nhớ. Địa chỉ bộ nhớ, nơi lưu trữ nội dung đối tượng, được lưu trữ trong vị trí bộ nhớ được gán cho biến john, dưới dạng con trỏ

Vì vậy, khi chúng tôi thay đổi giá trị của đối tượng john, chúng tôi không thực sự thay đổi nội dung của vị trí bộ nhớ được gán cho biến john, mà là nội dung của đối tượng john 💡. Tuy nhiên, nếu bạn cố gắng gán một đối tượng mới cho biến john, thì bạn sẽ không thể thực hiện được. Ví dụ: đoạn mã sau sẽ báo lỗi

const newPerson: Employee = {
name: 'Eric Cartman',
age: 20,
isFemale: false
};
john = newPerson

Đoạn mã trên sẽ báo lỗi

error: TS2588 [ERROR]: Cannot assign to 'john' because it is a constant.
john = newPerson
~~~~
at file:///home/runner/WeepyWarlikeVirus/index.ts:35:1
exit status 1

Điều tương tự cũng áp dụng cho các mảng

const primeNumbers: Array = [1, 2, 3, 5, 7];
primeNumbers.push[11];

Nếu bạn muốn biến các đối tượng và mảng thành bất biến, hãy sử dụng

const myAge: number = 34;
const isFemale: boolean = true;
myAge = 23;
isFemale = false;
3

Object.freeze[john];
Object.freeze[primeNumbers]

Tôi hy vọng bây giờ bạn đã hiểu rõ hơn về cách các biến hằng hoạt động trong Typescript. Hãy cho tôi biết nếu bạn có câu hỏi 👍

Mọi nhà phát triển Javascript đều biết rằng var và let có thể gán lại nhưng const không thể gán lại hoặc khai báo lại

Nhưng có một bí mật nhỏ về const, hãy xem một số mã

const val = 10; // 10
val = 15; // Uncaught TypeError: Assignment to constant variable

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Như mong đợi, chúng tôi không thể gán lại val cho một số khác. Làm thế nào về chuỗi?

________số 8

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Vẫn không có. Làm thế nào về mảng và đối tượng?

// Array
const arrVariable = [10, 11, 12, 13]; // [10, 11, 12, 13]
arrVariable = [14, 15, 16]; // Uncaught TypeError: Assignment to constant variable

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

const myAge: number = 34;
const isFemale: boolean = true;
myAge = 23;
isFemale = false;
0

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Javascript. Không không không bạn không thể làm điều đó không.
Nhưng nếu chúng ta làm điều này thì sao.

const myAge: number = 34;
const isFemale: boolean = true;
myAge = 23;
isFemale = false;
1

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Gì?. Hãy tiếp tục và chơi xung quanh một chút

const myAge: number = 34;
const isFemale: boolean = true;
myAge = 23;
isFemale = false;
2

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

OMG chuyện gì vừa xảy ra vậy?

Từ MDN Web Docs, nó mô tả

Khai báo const tạo một tham chiếu chỉ đọc đến một giá trị. Điều đó không có nghĩa là giá trị mà nó nắm giữ là bất biến, chỉ là định danh biến không thể được gán lại. Chẳng hạn, trong trường hợp nội dung là một đối tượng, điều này có nghĩa là nội dung của đối tượng [e. g. , thuộc tính của nó] có thể được thay đổi

Định danh biến/hằng ở đây là ai?

MDN cho biết mã định danh/hằng biến không thể được gán lại, điều đó có nghĩa là không thể gán lại arrVariable. Nhưng còn mảng thì sao?

const cho người đọc biết rằng biến của bạn không thể được gán lại, đó là lý do tại sao rất nên sử dụng. Nó ngăn chúng tôi tạo ra một số lỗi không cần thiết và cải thiện khả năng đọc mã

Chúng ta có thể thay đổi mảng const trong JavaScript không?

Không thể thay đổi giá trị của hằng số thông qua việc gán lại [i. e. bằng cách sử dụng toán tử gán] và nó không thể được khai báo lại [i. e. thông qua một khai báo biến]. Tuy nhiên, nếu hằng số là một đối tượng hoặc mảng thì các thuộc tính hoặc mục của nó có thể được cập nhật hoặc xóa.

Tại sao chúng ta có thể thay đổi đối tượng const?

Có, các thuộc tính và phương thức được thay đổi cho một đối tượng const. Khai báo const không có nghĩa là không thể thay đổi giá trị của biến. Điều đó chỉ có nghĩa là không thể chỉ định lại định danh biến .

Chủ Đề