ES6 const không liên tục cũng không bất biến


Ngô Quỳnh Chi
1 năm trước
Hữu ích 0 Chia sẻ Viết bình luận 0
Đã xem 10008

Tôi đã có cuộc trao đổi nhanh chóng trên JS một thời gian cách đây trên cẩu trong JS và trong khi thảo luận về cách treo áp dụng cho khai báo biến, chúng tôi imminently đạt ES6 của letconst. Do đó, chúng tôi bắt đầu nói về sự khác biệt giữa var, letconst, và làm thế nào constkhông thực sự là một hằng số hoặc bất biến.

const

Các hằng số có phạm vi khối, giống như các biến được định nghĩa bằng cách sử dụng  let câu lệnh. Giá trị của hằng số không thể thay đổi thông qua việc gán lại và nó không thể được xác định lại. - MDN

Trong thực tế, constnó không thực sự là một hằng số và nó không phải là bất biến.

  const obj = {
    one: 1,
    two: 2
  };

  // Object mutation is ok
  // {one: 1, two: 2, three: 3}
  obj.three = 3;

  // Reassignment doesn't work
  // Uncaught TypeError: Assignment to constant variable.
  obj = {
    one: "bazinga",
    two: "bazinga"
  };

Giá trị của hằng số không thể thay đổi thông qua việc gán lại, nhưng bất kỳ đối tượng hoặc mảng nào đều có thể thay đổi.

Là một đối tượng, một mảng có thể được đóng băng; sau khi làm như vậy, các phần tử của nó không thể được thay đổi và không có phần tử nào có thể được thêm vào hoặc xóa khỏi mảng. - MDN

  const arr = ["one","two"];

  // Array mutation is ok
  // ["one", "two", "three"]
  arr.push("three");

  Object.freeze(arr);
  // Uncaught TypeError: Cannot add property 3, object is not extensible
  arr.push("new");

Phần kết luận

Trong các ngôn ngữ như C++, ví dụ, một đối tượng là bất biến nếu nó được khai báo const.

Nhưng khi nói đến JavaScript, constkhông phải là về tính bất biến và để làm cho các giá trị của đối tượng trở nên bất biến, bạn có thể sử dụng Object.freeze () .

Bạn có thể muốn đọc thêm về vấn đề này:

Hữu ích 0 Chia sẻ Viết bình luận 0
Đã xem 10008