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;3
const isFemale: boolean = true;myAge = 23;
isFemale = false;
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;0
const isFemale: boolean = true;myAge = 23;
isFemale = false;
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;1
const isFemale: boolean = true;myAge = 23;
isFemale = false;
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;2
const isFemale: boolean = true;myAge = 23;
isFemale = false;
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ã