Hủy cấu trúc trong Node.JS


77

Video gần đây này tuyên bố rằng cấu trúc hủy EMCAScript 6 đã được triển khai một phần trong Node.JS. Tôi đã thử các ví dụ khác nhau (sử dụng v0.10.12 và --harmonycờ), chẳng hạn như

var [a, b] = [1, 2];

var {a: a, b: b} = {a: 1, b: 2};

không có kết quả. Vé này dường như gợi ý rằng tính năng hủy cấu trúc chưa được hỗ trợ trong V8.

Việc hủy cấu trúc có thực sự được thực hiện một phần trong Node.JS không? Tôi có thể chơi các đoạn mã nào?

Câu trả lời:


90

Cập nhật cho nút v6 và mới hơn : Node v6 hỗ trợ gán cấu trúc cơ cấu mà không cần bất kỳ điều gì đặc biệt:

var [a, b] = [1, 2];

Đối với các phiên bản cũ hơn của nút : Bạn có thể nhận danh sách các tính năng hòa âm được hỗ trợ bằng cách nhập:

node --v8-options | grep harmony

nút 5.x sẽ cung cấp cho bạn:

--es_staging (enable all completed harmony features)
--harmony (enable all completed harmony features)
--harmony_shipping (enable all shipped harmony fetaures)
--harmony_modules (enable "harmony modules" (in progress))
--harmony_regexps (enable "harmony regular expression extensions" (in progress))
--harmony_proxies (enable "harmony proxies" (in progress))
--harmony_sloppy_function (enable "harmony sloppy function block scoping" (in progress))
--harmony_sloppy_let (enable "harmony let in sloppy mode" (in progress))
--harmony_unicode_regexps (enable "harmony unicode regexps" (in progress))
--harmony_reflect (enable "harmony Reflect API" (in progress))
--harmony_destructuring (enable "harmony destructuring" (in progress))
--harmony_default_parameters (enable "harmony default parameters" (in progress))
--harmony_sharedarraybuffer (enable "harmony sharedarraybuffer" (in progress))
--harmony_atomics (enable "harmony atomics" (in progress))
--harmony_simd (enable "harmony simd" (in progress))
--harmony_array_includes (enable "harmony Array.prototype.includes")
--harmony_tostring (enable "harmony toString")
--harmony_concat_spreadable (enable "harmony isConcatSpreadable")
--harmony_rest_parameters (enable "harmony rest parameters")
--harmony_sloppy (enable "harmony features in sloppy mode")
--harmony_arrow_functions (enable "harmony arrow functions")
--harmony_new_target (enable "harmony new.target")
--harmony_object_observe (enable "harmony Object.observe")
--harmony_spreadcalls (enable "harmony spread-calls")
--harmony_spread_arrays (enable "harmony spread in array literals")
--harmony_object (enable "harmony Object methods")

Cờ bạn cần --harmony_destructuring, đã được thêm vào Node 4.1. Hiện tại, bạn sẽ cần vượt qua --harmony_destructuringcờ để bật tính năng:

$ node --harmony_destructuring
> var {foo} = {foo: 'bar'};
undefined
> foo
'bar'

3
@BrianMcCutchon Nếu không var, bạn sẽ cần phải làm gì ({foo} = {foo: 'bar})để ngăn phần đầu {được hiểu là bắt đầu một khối. Điều đó giống nhau trong bất kỳ triển khai nào.

@torazaburo Thật thú vị, đã không nghĩ đến điều đó. Mặc dù vậy, bạn được cho là có thể bỏ qua var/ letkhi cấu trúc các mảng, nhưng điều đó dường như chưa hoạt động trong nút.
Brian McCutchon

15

Nút phát hành gần đây node.js v6 đang sử dụng phiên bản V8 5.0, hỗ trợ 93% tính năng ngôn ngữ ES2015 (thậm chí 96% trong v6.1).

Các nhiệm vụ hủy cấu trúc hiện có thể được coi là ổn định và có thể được sử dụng mà không cần bất kỳ cờ nào.


10

Bảng tương thích ES6 cho thấy rằng cấu trúc hủy không được hỗ trợ trong Chrome 45 hoặc Node v4.


1
Ngay cả với node --harmony_destructuring😓
Ahmed Fasih

7
Trong Node v5.0.0 nó hoạt động với node --harmony_destructuring. Tôi không biết về v4.
kernel

6
hoạt động cho tôi trong nút 4.2.2 với --harmony_destectors
Oleksii Rudenko

Kể từ phiên bản Chrome (49) mới nhất hiện đã được hỗ trợ. Miễn là bạn gắn bó với Chrome hoặc Node (với các cờ thích hợp), giờ đây bạn có thể sử dụng gần như toàn bộ ES6 mà không cần đến trình chuyển đổi như Babel.
machineghost
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.