1. Hằng trong JavaScript là gì?

Hằng (constant hay viết tắt là const) là một thành phần cơ bản trong Js có khả năng chứa dữ liệu. Căn bản nó cũng chính là một biến nhưng là một biến đặc biệt mà giá trị dữ liệu của nó không thể thay đổi trong suốt một kịch bản.

Từ khóa const được giới thiệu vào phiên bản ES6(2015). ES6 (viết tắt của ECMAScript 6) là một tập hợp các kỹ thuật nâng cao của JavaScript. ECMAScript do hiệp hội các nhà sản xuất máy tính Châu Âu đề xuất làm tiêu chuẩn của ngôn ngữ JavaScript. Bạn cứ nghĩ xem hiện nay có khá nhiều trình duyệt Browser ra đời và nếu mỗi Browser lại có cách chạy JavaScript khác nhau thì các trang web không thể hoạt động trên tất cả các trình duyệt đó được, vì vậy cần có một chuẩn chung để bắt buộc các browser phải phát triển dựa theo chuẩn đó.

Để dẽ hiểu hơn bạn cũng có thể hình dung rằng hằng là một loại nhân vật có tính khả năng không hề thay đổi trong suốt quá trình diễn biến của một câu chuyện. Ta không thể khai báo lại các biến được xác định với const và cũng không thể gán lại các biến đã được xác định với const. Các biến được xác định với const sẽ có phạm vi khối.

Cú pháp khai báo:

const tenHang = giatri;

Trong đó:

  • tenHang: Là tên của hằng các bạn muốn đặt.
  • giatri: Là giá trị của hằng, có thể là số,chuỗi,mảng,object.

Chú ý tên hằng được theo quy tắc sau:

  • Tên hằng bắt đầu phải là chữ cái hoặc ký tự ‘_’
  • Tên hằng không được bắt đầu bằng số.
  • Tên hằng có độ dài không giới hạn.

Ví dụ:

const MyConst = 4; // đúng
    const _MyConst = 4; // đúng
    const __MyConst = 4; // đúng
    const MyConst1 = 4; // đúng
    const _MyConst1 = 4; // đúng
    const __MyConst1 = 4; // đúng
    const 90MyConst1 = 4; // sai
    const -MyConst1 = 4; // sai

Một biến không được chỉ định lại:

const PI = 3.141592653589793;
PI = 3.14;      // Điều này sẽ gây ra lỗi
PI = PI + 10;   // Điều này cũng sẽ gây ra lỗi

Hằng phải được gán giá trị khi chúng được khai báo:

const PI = 3.14159265359;
//khai báo không đúng
const PI;
PI = 3.14159265359;

Lưu ý

const chỉ ngăn không cho bạn gán lại đối tượng đó, chứ không ngăn việc bạn thay đổi (mutate) nó. Ví dụ:

const arr = [1, 2, 3, 4]
arr[0] = 5
console.log(arr)
=> [5, 2, 3, 4]

2. Khi nào sử dụng hằng số trong JavaScript

Theo nguyên tắc chung hãy luôn khai báo một biến với const khi mà bạn đã biết trước giá trị của nó sẽ không thay đổi. Khi khai báo với const ta thường khai báo với:

  • 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 (biểu thức chính quy)

3. Khi nào dùng let, const và var trong JavaScript

Nếu bạn đến từ các ngôn ngữ khác, ắt hẳn sẽ nghĩ rằng hầu hết thời gian thì nên dùng let, khi nào cấm khai báo lại thì dùng const và để var vào quá khứ. Tuy nhiên, chính chủ đề này cũng gây ra rất nhiều tranh cãi, nhiều người lại nghĩ là nên dùng const càng nhiều càng tốt, đến mức mà prefer-const được làm thành một quy tắc của ESlint. Các lý do được liệt kê để dùng const như sau:

  • Nhất quán phương pháp
  • Ở các hàm dài, việc gán đi gán lại các biến có thể sinh ra bug
  • Dẫn dắt người mới học về mutation trong javascript
  • Giữ cho các phần gán biến có ý nghĩa
  • Tốc độ chạy

Các lý do được liệt kê để không dùng const như sau:

  • Mất ý nghĩa của hằng số (chỗ nào cũng là hằng thì không biết hằng số sẽ mất đặc tính)
  • Hiểu nhầm việc gán biến và khai báo biến
  • Ở các hàm dài, việc gán đi gán lại các biến chưa chắc đã sinh ra bug

Kết luận được đưa ra ở đây là bạn hãy dùng cách nào phù hợp với phong cách của bạn và nhất quán với quy ước của nhóm.

4. Đối tượng và mảng không đổi với hằng trong JavaScript

Từ khóa const có thể dẫn đến một chút sai lệch. 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 mà 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

Nhưng điều mà bạn có thể:

  • 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