JavaScript Const
Từ const
khóa đã được giới thiệu trong
ES6 (2015) .
Không thể khai báo lại các biến được xác định với const
.
const
Không thể gán lại các biến được xác định với .
Các biến được xác định với const
có Phạm vi khối.
Không thể được giao lại
Một const
biến không thể được chỉ định lại:
Thí dụ
const PI = 3.141592653589793;
PI = 3.14; // This will give an error
PI = PI + 10; // This will also give an error
Phải được chỉ định
Các biến JavaScript const
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 sử dụng JavaScript const?
Theo nguyên tắc chung, hãy luôn khai báo một biến với const
trừ khi bạn biết rằng giá trị sẽ thay đổi.
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
- Một RegExp mới
Đối tượng và Mảng không đổi
Từ khóa const
là một chút sai lầm.
Nó không xác định một giá trị không đổi. Nó xác định 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
- Gán lại một mảng không đổi
- Gán lại một đối tượng không đổi
- Thay đổi các phần tử của mảng hằng số
- Thay đổi các thuộc tính của đối tượng hằng
Nhưng bạn CÓ THỂ:
Mảng cố định
Bạn có thể thay đổi các phần tử của một mảng không đổi:
Thí 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");
Nhưng bạn KHÔNG thể gán lại mảng:
Thí dụ
const cars = ["Saab", "Volvo", "BMW"];
cars = ["Toyota", "Volvo", "Audi"]; // ERROR
Đố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 hằng số:
Thí 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";
Nhưng bạn KHÔNG thể gán lại đối tượng:
Thí dụ
const car = {type:"Fiat", model:"500", color:"white"};
car = {type:"Volvo", model:"EX60", color:"red"}; //
ERROR
Hỗ trợ trình duyệt
Từ const
khóa không được hỗ trợ trong Internet Explorer 10 trở xuống.
Bảng sau xác định các phiên bản trình duyệt đầu tiên có hỗ trợ đầy đủ cho const
từ khóa:
Chrome 49 | IE 11 / Edge | Firefox 36 | Safari 10 | Opera 36 |
Mar, 2016 | Oct, 2013 | Feb, 2015 | Sep, 2016 | Mar, 2016 |
Phạm vi khối
Khai báo một biến với const
tương tự như let
khi nói đến Phạm vi khối .
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:
Thí dụ
const x = 10;
// Here x is 10
{
const x = 2;
// Here x is 2
}
// Here x is 10
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
Khai báo lại một biến JavaScript var
được phép ở bất kỳ đâu trong chương trình:
Thí dụ
var x = 2; // Allowed
var x = 3; // Allowed
x = 4; // Allowed
Không được phép khai báo lại một biến hiện có var
hoặc let
biến const
trong cùng một phạm vi:
Thí 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 hiện có const
, trong cùng một phạm vi:
Thí 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
}
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, được phép:
Thí dụ
const x = 2; // Allowed
{
const x = 3; // Allowed
}
{
const x = 4; // Allowed
}
Const Hoists
Các biến được xác định bằng var
được nâng 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:
Thí dụ
Điều này là OK:
carName = "Volvo";
var carName;
Nếu bạn muốn tìm hiểu thêm về hoists, hãy nghiên cứu chương JavaScript Hoisting .
Các biến được xác định với const
cũng được đưa lên đầu, nhưng không được khởi tạo.
Ý nghĩa: Sử dụng một const
biến trước khi nó được khai báo sẽ dẫn đến
ReferenceError
:
Thí dụ
alert (carName);
const carName = "Volvo";