Const trong JavaScript

ECMAScript 2015

ES2015 đã giới thiệu hai từ khóa mới quan trọng của JavaScript:letconst.

Bằng cách const Biến được định nghĩa let Biến được định nghĩa tương tự, nhưng không thể gán lại giá trị:

Mô hình

const PI = 3.141592653589793;
PI = 3.14;      // Sẽ gặp lỗi
PI = PI + 10;   // Sẽ gặp lỗi

Thử trực tiếp

Khu vực hoạt động của khối

TrongKhu vực hoạt động của khốiTrong const Biến được khai báo let Biến tương tự.

Trong ví dụ này, x được khai báo trong khối, khác với x được khai báo ngoài khối:

Mô hình

var x = 10;
// Ở đây, x là 10
{ 
  const x = 6;
  // Ở đây, x là 6
}
// Ở đây, x là 10

Thử trực tiếp

Bạn có thể xem lại chương trước Let trong JavaScript Tôi học thêm về khu vực hoạt động của khối.

khi khai báo

JavaScript const Biến phải được gán giá trị khi khai báo:

Sai

const PI;
PI = 3.14159265359;

Đúng

const PI = 3.14159265359;

Không phải là hằng số thực sự

Từ khóa const Có tính误导.

Nó không định nghĩa giá trị hằng số. Nó định nghĩa một tham chiếu hằng số đến giá trị.

Do đó, chúng ta không thể thay đổi giá trị nguyên thủy của hằng số, nhưng chúng ta có thể thay đổi thuộc tính của đối tượng hằng số.

Giá trị nguyên thủy

Nếu chúng ta gán một giá trị nguyên thủy cho hằng số, chúng ta không thể thay đổi giá trị nguyên thủy:

Mô hình

const PI = 3.141592653589793;
PI = 3.14;      // Sẽ gặp lỗi
PI = PI + 10;   // Sẽ gặp lỗi

Thử trực tiếp

Đối tượng hằng số có thể thay đổi

Bạn có thể thay đổi thuộc tính của đối tượng hằng số:

Mô hình

// Bạn có thể tạo đối tượng const:
const car = {type:"porsche", model:"911", color:"Black"};
// Bạn có thể thay đổi thuộc tính:
car.color = "White";
// Bạn có thể thêm thuộc tính:
car.owner = "Bill";

Thử trực tiếp

Nhưng bạn không thể gán lại giá trị cho đối tượng thường số:

Mô hình

const car = {type:"porsche", model:"911", color:"Black"};
car = {type:"Volvo", model:"XC60", color:"White"};    // LỖI

Thử trực tiếp

Mảng thường số có thể thay đổi

Bạn có thể thay đổi phần tử của mảng thường số:

Mô hình

// Bạn có thể tạo mảng thường số:
const cars = ["Audi", "BMW", "porsche"];
// Bạn có thể thay đổi phần tử:
cars[0] = "Honda";
// Bạn có thể thêm phần tử:
cars.push("Volvo");

Thử trực tiếp

Nhưng bạn không thể gán lại giá trị cho mảng thường số:

Mô hình

const cars = ["Audi", "BMW", "porsche"];
cars = ["Honda", "Toyota", "Volvo"];    // LỖI

Thử trực tiếp

Hỗ trợ trình duyệt

Internet Explorer 10 hoặc các phiên bản trước không hỗ trợ const Từ khóa.

Bảng dưới đây định nghĩa các phiên bản trình duyệt hỗ trợ hoàn toàn từ khóa const:

Chrome 49 IE / Edge 11 Firefox 36 Safari 10 Opera 36
Tháng 3 năm 2016 Tháng 10 năm 2013 Tháng 2 năm 2015 Tháng 9 năm 2016 Tháng 3 năm 2016

Khởi tạo lại

Được phép khởi tạo lại JavaScript ở bất kỳ vị trí nào trong chương trình var Biến:

Mô hình

var x = 2;    // Được phép
var x = 3;    // Được phép
x = 4;        // Được phép

Trong cùng phạm vi hoặc khối, không được phép khởi tạo lại biến đã có: var hoặc let Khởi tạo lại hoặc gán lại giá trị cho biến const:

Mô hình

var x = 2;         // Được phép
const x = 2;       // Không được phép
{
  let x = 2;     // Được phép
  const x = 2;   // Không được phép
}

Trong cùng phạm vi hoặc khối, không được phép khai báo lại hoặc gán giá trị cho biến const đã có:

Mô hình

const x = 2;       // Cho phép
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;   // Cho phép
  const x = 3;   // Không cho phép
  x = 3;         // Không cho phép
  var x = 3;     // Không cho phép
  let x = 3;     // Không cho phép
}

Định lại trong một phạm vi hoặc khối khác const Là cho phép:

Mô hình

const x = 2;       // Cho phép
{
  const x = 3;   // Cho phép
}
{
  const x = 4;   // Cho phép
}

Nâng cấp

Bằng cách var Biến được định nghĩa sẽNâng cấpđến đầu. Nếu bạn không hiểu gì về nâng cấp (Hoisting), hãy học phần nâng cấp này.

Bạn có thể sử dụng biến var trước khi khai báo nó:

Mô hình

carName = "Volvo";    // Bạn có thể sử dụng carName tại đây
var carName;

Thử trực tiếp

Bằng cách const Biến được định nghĩa sẽ không được nâng cấp lên đầu.

const Biến không thể sử dụng trước khi khai báo:

Mô hình

carName = "Volvo";    // Bạn không thể sử dụng carName tại đây
const carName = "Volvo";