ES6 trên io.js

io.js được xây dựng dựa trên các phiên bản mới nhất của V8. Bằng cách cập nhật liên tục các phiên bản mới của engine này, chúng tôi đảm bảo các tính năng mới đến từ JavaScript ECMA-262 specification sẽ được cung cấp đến cho các lập trình viên io.js một cách kịp thời, cũng như tiếp tục các cải tiến về hiệu suất và tính ổn định.

Phiên bản 1.4.1 của io.js được phát hành cùng với V8 4.1.0.21 , bao gồm các tính năng của ES6 vượt xa phiên bản 3.28.73 được phát hành cùng với Node.js™ 0.12.x.

Không sử dụng --harmony flag

Trên Node.js™@0.12.x (V8 3.28+), --harmony runtime flag mở tất cả các tính năng đã hoàn thiện (completed), đang thử nghiệm (staged)đang được phát triển (in progress) của ES6 cùng nhau (trừ trường hợp của proxies được mở với --harmony-proxies). Điều này rất phiền phức hay thậm chí có thể làm hỏng 1 số tính năng như Arrow Functions được sử dụng cùng với generators sẽ gây ra 1 số issues. Phần đa các lập trình viên có xu hướng mở các tính năng cụ thể bằng các xác định các runtime harmony flags tương ứng (như --harmony-generators) hay mở hết và sau đó sử dụng 1 restricted subset.

Với io.js (V8 4.1+), tất cả những sự phức tạp này không còn nữa. Tất cả các tính năng của harmony đã được chia một cách hợp lý vào 3 nhóm các tính năng là đã phát hành (shipping), đang thử nghiệm(staged) và đang phát triển (in progress):

Tính năng nào của ES6 được phát hành cùng với io.js theo mặc định ? (không yêu cầu runtime flag)

Bạn có thể xem thông tin đầy đủ hơn ở đây, bao gồm việc so sánh với các engines khác, trên 1 dự án compat-table.

Những tính năng nào của ES6 được mở với --es_staging flag ?

Những tính năng nào của ES6 đang được phát triển ?

Những tính năng mới đang được liên tục thêm vào trong V8 engine. Nói chung chúng ta sẽ mong đợi những tính năng này ở các phiên bản tiếp theo của io.js, tuy thời gian là không xác định.

Bạn có thể liệt kê tất cả các tính năng đang phát triển đi kèm trên mỗi phiên bản của V8, được gọi thông qua tham số --v8-options. Xin lưu ý chúng chưa hoàn thiện và có thể làm hỏng các tính năng khác của V8, bạn phải tự chịu trách nhiệm khi sử dụng chúng:

iojs --v8-options | grep "in progress"

Tôi có đủ điều kiện để thiết lập 1 môi trường để chạy --harmony flag. Liệu tôi có nên làm điều này ?

Hiện tại khi sử dụng --harmony flag trên io.js sẽ chỉ mở các tính năng đang thử nghiệm. Nó tương đương với --es_staging. Như đã đề cập ở bên trên, đây là các tính năng đã được hoàn thiện nhưng chưa được xem xét là ổn định.

Nếu bạn muốn chạy an toàn, đặc biệt là trên môi trường production. Bạn không nên sử dụng các tính năng này cho đến khi chúng được phát hành trên V8, và đồng thời trên io.js. Nếu bạn vẫn sử dụng chúng, bạn nên chuẩn bị 1 bản cập nhật cho phần code có khả năng hỏng khi V8 thay đổi nội dung của họ cho sát nhất với chuẩn đặc tả.

Làm cách nào để tôi biết được phiên bản V8 phát hành cùng với 1 phiên bản cụ thể của io.js ?

io.js cung cấp 1 cách đơn giản nhất để liệt kê tất cả các phụ thuộc và các phiên bản tương ứng mà sẽ phát hành 1 bản binary cụ thể thông qua đối tượng process toàn cục. Trong trường hợp của V8 engine, hãy gõ như sau trong terminal để nhận phiên bản của nó.

iojs -p process.versions.v8