Mục tiêu bài viết
- Hiểu được từ khóa
const
và cách sử dụng của từ khóa này. - Có thể thực hành với từ khóa
const
.
Nội dung bài viết
Ở phiên bản ES2015 đã giới thiệu 2 từ khóa Javascript mới là let
và const
. Bài trước chúng ta đã tìm hiểu let
, đến bài này chúng ta sẽ tìm hiểu thứ còn lại đó là const
.
Các biến được xác định bằng const
hoạt động giống như biến let
, ngoại trừ chúng không thể được gán lại giá trị. Ví dụ:
const PI = 3.141592653589793;
PI = 3.14; // Gây ra lỗi
PI = PI + 10; // Cũng gây ra lỗi
Phạm vi khối
Khai báo biến với từ khóa const
cũng giống như let
.
var x = 10;
// Ở đây x là 10
{ const x = 2; // Ở đây x là 2
}
// Ở đây x là 10
Gán khi khai báo
Biến khai báo với từ khóa const
phải được gán giá trị khi khai báo.
const PI;
PI = 3.14159265359; // sai const PI = 3.14159265359; // đúng
Hằng số
const
không xác định một giá trị không đổi mà nó xác định một tham chiếu không đổi đến một giá trị.
Bởi vì điều này nên không thể thay đổi các giá trị nguyên thủy không đổi, nhưng chúng ta có thể thay đổi các thuộc tính của các đối tượng hằng số
Giá trị nguyên thủy
Nếu gán một giá trị nguyên thủy cho một hằng số thì chúng ta không thể thay đổi giá trị đó. Ví dụ:
const PI = 3.141592653589793;
PI = 3.14; // error
PI = PI + 10; // error
Hằng số là đối tượng có thể thay đổi
Khi khai báo một đối tượng với từ khóa const
chúng ta có thể thay đổi giá trị của thuộc tính đối tượng. Ví dụ:
const car = { type: "Fiat", model: "500", color: "white" }; // thay đổi giá trị của thuộc tính color
car.color = "red"; // Có thể thêm cả thuộc tính mới vào đối tượng.
car.owner = "Johnson";
Có thể thay đổi giá trị của thuộc tính đôi tượng nhưng không thể gán lại cho nó một đối tượng mới. Ví dụ:
const car = { type: "Fiat", model: "500", color: "white" };
car = { type: "Volvo", model: "EX60", color: "red" }; // ERROR
Hàng số là mảng có thể thay đổi
Tương tự như đối tượng, chúng ta có thể thay đổi các giá trị của các phần tử trong 1 mảng. Ví dụ:
const cars = ["Saab", "Volvo", "BMW"]; // Thay đổi phần tử thứ 0
cars[0] = "Toyota"; // Có thể thêm cả phần tử mới vào mảng.
cars.push("Audi");
Tương tự Object , bạn cũng không thể gán lại cho nó 1 mảng mới. Ví dụ:
const cars = ["Saab", "Volvo", "BMW"];
cars = ["Toyota", "Volvo", "Audi"]; // ERROR
Khai báo lại
Không được phép khai báo đè biến var
hoặc let
hiện có thành biến const
trong cùng phạm vi hoặc cùng một khối. Ví dụ:
var x = 2;
const x = 2; // Không được phép
{ let x = 2; const x = 2; // Không được phép
}
Không được phép khai báo lại hoặc gán lại một biến const hiện có, trong cùng phạm vi hoặc trong cùng một khối.
const x = 2;
const x = 3; // Không được phép
x = 3; // Không được phép
var x = 3; // Không được phép
let x = 3; // Không được phép
const x = 2;
const x = 3; // Không được phép
x = 3; // Không được phép
var x = 3; // Không được phép
let x = 3; // Không được phép
Được phép khai báo lại một biến với const, trong một phạm vi khác hoặc trong một khối khác.
const x = 2; // Được phép { const x = 3; // Được phép
} { const x = 4; // Được phép
}
Hoisting
Các biến được định nghĩa bằng var
được đẩy lên trên cùng và sẽ được khởi tạo.
Nhưng với biến const
cũng được đưa lên đầu khối, nhưng không được khởi tạo. Khối mã nhận biết được biến, nhưng nó không thể được sử dụng cho đến khi nó đã được khai báo.
Sử dụng một biến const
trước khi nó được khai báo, là một lỗi cú pháp.
carName = "Volvo";
const carName;