Hằng số JavaScript
Từ khóa const
được giới thiệu trong ES6 (2015)
Các biến được xác định bằng const
không thể được khai báo lại
Các biến được xác định bằng const
không thể được gán lại
Các biến được xác định bằng const
có Phạm vi khối
Không thể được chỉ định lại
Một biến được xác định bằng từ khóa const
không thể được gán lại:
Ví dụ
const PI = 3.141592653589793;
PI = 3.14; // This will give an error
PI = PI + 10; // This will also give an error
Hãy tự mình thử »Phải được chỉ định
Các biến const
trong JavaScript phải được gán một giá trị khi chúng được khai báo:
Chính xác
const PI = 3.14159265359;
Không đúng
const PI;
PI = 3.14159265359;
Khi nào nên sử dụng const JavaScript?
Luôn khai báo một biến bằng const
khi bạn biết rằng không nên thay đổi giá trị.
Sử dụng const
khi bạn khai báo:
- Một mảng mới
- Một đối tượng mới
- Một chức năng mới
- RegExp mới
Đối tượng và mảng không đổi
Từ khóa const
hơi gây hiểu nhầm.
Nó không xác định một giá trị không đổi. Nó định nghĩa một tham chiếu không đổi đến một giá trị.
Vì điều này bạn KHÔNG thể:
- Gán lại một giá trị không đổi
- Tái chỉ định một mảng không đổi
- Tái chỉ định một đối tượng không đổi
- Thay đổi các phần tử của mảng hằng
- Thay đổi thuộc tính của đối tượng không đổi
Nhưng bạn CÓ THỂ:
Mảng hằng số
Bạn có thể thay đổi các phần tử của một mảng không đổi:
Ví dụ
// You can create a constant array:
const cars = ["Saab", "Volvo", "BMW"];
// You can change an element:
cars[0] = "Toyota";
// You can add an element:
cars.push("Audi");
Hãy tự mình thử »Nhưng bạn KHÔNG thể gán lại mảng:
Ví dụ
const cars = ["Saab", "Volvo", "BMW"];
cars = ["Toyota", "Volvo", "Audi"]; // ERROR
Hãy tự mình thử »Đối tượng không đổi
Bạn có thể thay đổi các thuộc tính của một đối tượng không đổi:
Ví dụ
// You can create a const object:
const car = {type:"Fiat", model:"500", color:"white"};
// You can change a property:
car.color = "red";
// You can add a property:
car.owner = "Johnson";
Hãy tự mình thử »Nhưng bạn KHÔNG thể gán lại đối tượng:
Ví dụ
const car = {type:"Fiat", model:"500", color:"white"};
car = {type:"Volvo", model:"EX60", color:"red"}; //
ERROR
Hãy tự mình thử »Sự khác biệt giữa var, let và const
Phạm vi | Khai báo lại | Phân công lại | nâng lên | Ràng buộc điều này | |
var | KHÔNG | Đúng | Đúng | Đúng | Đúng |
cho phép | Đúng | KHÔNG | Đúng | KHÔNG | KHÔNG |
hằng số | Đúng | KHÔNG | KHÔNG | KHÔNG | KHÔNG |
Điều gì tốt?
let
và const
có phạm vi khối .
let
và const
không thể được khai báo lại .
let
và const
phải được khai báo trước khi sử dụng.
let
và const
không liên kết với this
.
let
và const
không được nâng lên .
Điều gì là không tốt?
var
không cần phải khai báo.
var
được nâng lên.
var
liên kết với điều này.
Hỗ trợ trình duyệt
Từ khóa let
và const
không được hỗ trợ trong Internet Explorer 11 trở về trước.
Bảng sau xác định các phiên bản trình duyệt đầu tiên được hỗ trợ đầy đủ:
Chrome 49 | Edge 12 | Firefox 36 | Safari 11 | Opera 36 |
Mar, 2016 | Jul, 2015 | Jan, 2015 | Sep, 2017 | Mar, 2016 |
Phạm vi chặn
Khai báo một biến bằng const
cũng tương tự như let
khi nói đến Block Scope .
Trong ví dụ này, x được khai báo trong khối không giống với x được khai báo bên ngoài khối:
Ví dụ
const x = 10;
// Here x is 10
{
const x = 2;
// Here x is 2
}
// Here x is 10
Hãy tự mình thử »Bạn có thể tìm hiểu thêm về phạm vi khối trong chương Phạm vi JavaScript .
Khai báo lại
Việc khai báo lại biến var
JavaScript được phép ở bất kỳ đâu trong chương trình:
Ví dụ
var x = 2; // Allowed
var x = 3; // Allowed
x = 4; // Allowed
Không được phép khai báo lại một var
hoặc let
hiện có thành const
, trong cùng phạm vi:
Ví dụ
var x = 2; // Allowed
const x = 2; // Not allowed
{
let x = 2; // Allowed
const x = 2; // Not allowed
}
{
const x = 2; // Allowed
const x = 2; // Not allowed
}
Không được phép gán lại một biến const
hiện có, trong cùng phạm vi:
Ví dụ
const x = 2; // Allowed
x = 2; // Not allowed
var x = 2; // Not allowed
let x = 2; // Not allowed
const x = 2; // Not allowed
{
const x = 2; // Allowed
x = 2;
// Not allowed
var x = 2;
// Not allowed
let x = 2;
// Not allowed
const x = 2; // Not allowed
}
Được phép khai báo lại một biến với const
, trong phạm vi khác hoặc trong khối khác:
Ví dụ
const x = 2; // Allowed
{
const x = 3; // Allowed
}
{
const x = 4; // Allowed
}
Cẩu
Các biến được xác định bằng var
được đưa lên trên cùng và có thể được khởi tạo bất kỳ lúc nào.
Ý nghĩa: Bạn có thể sử dụng biến trước khi nó được khai báo:
Nếu bạn muốn tìm hiểu thêm về hoisting, hãy nghiên cứu chương JavaScript Hoisting .
Các biến được xác định bằng const
cũng được đưa lên đầu nhưng không được khởi tạo.
Ý nghĩa: Sử dụng biến const
trước khi khai báo sẽ dẫn đến ReferenceError
: