10 điểm bởi GN⁺ 2025-06-30 | 3 bình luận | Chia sẻ qua WhatsApp
  • Tại cuộc họp TC39 lần thứ 108 gần đây, 9 đề xuất sẽ định hình tương lai của JavaScript đã có tiến triển ở từng giai đoạn chuẩn hóa
  • Stage 4 (phê duyệt cuối cùng) bao gồm các tính năng như using, Array.fromAsync, Error.isError, giúp nâng cao năng suất và độ an toàn khi phát triển
  • Stage 3~1, nhiều đề xuất tính năng hữu ích đang được thảo luận như ArrayBuffer bất biến, random có seed, clamp, cải tiến NumberFormat, các hàm Random
  • Deno đang tích cực áp dụng và thử nghiệm các chuẩn mới nhất, và một số tính năng đã có thể dùng trên Deno cũng như các trình duyệt hiện đại
  • Các cuộc thảo luận chuẩn hóa sẽ tiếp tục trong thời gian tới, và hệ sinh thái JavaScript được kỳ vọng sẽ phát triển theo hướng an toàn hơn và gọn gàng hơn

Xu hướng chuẩn hóa mới nhất của TC39 và các tính năng mới chính của JavaScript

Stage 4: Các tính năng sắp được chấp nhận chính thức

Quản lý tài nguyên tường minh (using)

  • Câu lệnh khai báo using bảo đảm tự động dọn dẹp khi vòng đời của các đối tượng tài nguyên như tệp, socket mạng kết thúc
  • Lấy cảm hứng từ C#, Python..., cơ chế này cho phép đối tượng triển khai phương thức [Symbol.dispose]() hoặc [Symbol.asyncDispose]() để được gọi khi khối lệnh kết thúc
  • Ngay cả khi phát sinh ngoại lệ, việc dọn dẹp vẫn diễn ra tự động, giúp giảm nguy cơ rò rỉ tài nguyên như file handle
  • Đã được hỗ trợ trong Chrome 134, Firefox 134, Deno v2.3..., và trên Deno có thể áp dụng ngay vào thực tế với tệp, socket...

Array.fromAsync

  • Phương thức chuẩn để chuyển iterable bất đồng bộ thành mảng, trả về Promise
  • Thu thập tuần tự các giá trị từ async generator..., sau đó nhận kết quả mảng cuối cùng dưới dạng Promise
  • Cách dùng tương tự Array.from đồng bộ hiện có, đồng thời hỗ trợ hàm mapping và thisArg
  • Được hỗ trợ trong mọi trình duyệt lớn, Node v22, Deno v1.38 trở lên

Error.isError

  • Hàm tích hợp giúp xác định đơn giản liệu một giá trị có phải là đối tượng Error thực sự hay không
  • Hoạt động đáng tin cậy ngay cả trong các trường hợp phức tạp như cross-realm hay lỗi dạng subclass
  • Tăng độ tin cậy khi phát triển polyfill và thư viện

Stage 3: ArrayBuffer bất biến

Immutable ArrayBuffer

  • Dự kiến bổ sung các phương thức transferToImmutable(), sliceToImmutable() để hỗ trợ biến ArrayBuffer thành bất biến
  • Buffer bất biến sau khi tạo ra sẽ không thể sửa đổi hay tách rời, góp phần chia sẻ an toàn giữa thread và worker cũng như cải thiện hiệu năng
  • Trên Deno..., có thể tận dụng hiệu quả khi xử lý dữ liệu nhị phân mà không cần sao chép không cần thiết

Stage 2: Các tính năng đề xuất mới

Random.Seeded

  • PRNG dựa trên seed (Random.Seeded(seed)) cho phép tạo cùng một chuỗi số ngẫu nhiên qua các lần chạy lặp lại
  • Hữu ích cho các lĩnh vực cần tính tái lập như game và mô phỏng
  • Khác với Math.random(), nó cung cấp các tính năng nâng cao như chỉ định seed và sao chép trạng thái

Number.prototype.clamp

  • Phương thức giới hạn phạm vi số, tự động hiệu chỉnh giá trị vào trong khoảng min~max được chỉ định
  • Thay thế ngắn gọn và rõ ràng cho mẫu Math.min(Math.max(x, min), max) hiện có

Stage 1: Các đề xuất đang ở giai đoạn thảo luận ban đầu

Keep Trailing Zeros

  • Tùy chọn mới của Intl.NumberFormat, cho phép kiểm soát chi tiết việc giữ hoặc bỏ số 0 ở phần thập phân
  • Tăng khả năng biểu đạt mong muốn trong UI cho các trường hợp như số tiền hay số thập phân cố định

Comparisons

  • Mục tiêu là chuẩn hóa cách biểu diễn giá trị thân thiện với con ngườixuất diff, tương tự util.inspect của Node.js
  • Mang lại tính nhất quán trong framework kiểm thử, đầu ra console...

Random Functions

  • Đưa vào namespace Random mới, tập hợp các hàm liên quan đến random như tạo số ngẫu nhiên, sampling, shuffle theo cách an toàn và gọn gàng
  • Giúp tránh lỗi off-by-one và hỗ trợ trực quan nhiều mẫu thu thập, lấy mẫu khác nhau

Tương lai của Deno và hệ sinh thái JavaScript

  • Deno đang tham gia tích cực vào các cuộc thảo luận chuẩn hóa và nhanh chóng phản ánh các tính năng mới nhất vào thực tiễn
  • Ví dụ: truyền async context, OpenTelemetry tích hợp sẵn, các mẫu quản lý tài nguyên mới
  • Dự kiến các thảo luận chuẩn hóa sẽ tiếp tục trong các cuộc họp TC39 bổ sung sau tháng 9
  • Các nhà phát triển JavaScript trong tương lai sẽ có thể trải nghiệm một môi trường ngôn ngữ mạnh mẽ hơn, an toàn hơn và thuận tiện hơn

3 bình luận

 
carnoxen 2025-07-03

đề xuất await operations

Cái này là khi nào...

 
dohyun682 2025-06-30

Không biết khi nào thì pattern matching mới được thêm vào nhỉ

 
click 2025-06-30

Hiện có signals ở stage 1, nên có vẻ vẫn còn khá xa mới có thể phát hành chính thức.