Javascript enum ES6
Bài viết này sẽ chỉ cho bạn cách tạo và sử dụng Enums trong JavaScript. Rất tiếc, javaScript không bao gồm hỗ trợ riêng cho Enums, nhưng bạn có thể tự thêm chức năng tương đương Show
Lưu ý rằng TypeScript, một ngôn ngữ xây dựng trên JavaScript, không bao gồm hỗ trợ cho Enums nguyên bản. Vì vậy, chúng tôi chỉ xem xét JavaScript đơn giản ở đây - không phải TypeScript Enum là gì?Một Enum (Kiểu liệt kê) là một cấu trúc dữ liệu chứa nhiều giá trị. Mỗi giá trị được gán cho một mã định danh – và có thể được truy cập bởi mã định danh đó Các enum chứa các hằng số được xác định trước không được dự kiến thay đổi (chúng sẽ giống nhau khi ứng dụng được viết và khi nó được chạy để bạn luôn có thể tham khảo dữ liệu trong enum bằng cùng một mã định danh và nhận được cùng một Đối tượng JavaScript. phương thức đóng băng ()Vì vậy, nếu không có hỗ trợ riêng cho Enums, chúng tôi làm cách nào để sử dụng Enums? Cho biết Enum là gì – một tập hợp các cặp khóa/giá trị không thay đổi, chúng ta có thể tạo một đối tượng (có thể chứa một tập hợp các cặp khóa-giá trị) – và sau đó đóng băng nó bằng Object. đóng băng (làm cho nó không thay đổi). Do đó, cả hai thuộc tính chính của enum đều được đáp ứng // Declare a constant called Month, containing our Enum const Month = { JAN: 1, FEB: 2, MAR: 3 }; // Freeze it! It now can't be changed Object.freeze(Month); // Assign a value from the Enum to a variable to test it let thisMonth = Month.MAR; console.log(thisMonth); # Outputs 3 - the value of MAR in the Enum // Trying to add a new member to the Enum will fail - but no error is produced. The object is just frozen and won't be modified. Month.APR = 4; console.log(Month) # Will return the original frozen Month Enum - APR will not be included Giản dị. Enums có thể chứa bất kỳ giá trị nào – bất kỳ biến nào – chuỗi, số, đối tượng, giá trị boolean, v.v. Bạn có thể truy cập các giá trị trong enum theo tên thuộc tính như với bất kỳ loại đối tượng JavaScript nào khác Enums cho phép nhà phát triển xác định một tập hợp các hằng số được đặt tên. Sử dụng enums có thể giúp ghi lại ý định dễ dàng hơn hoặc tạo một tập hợp các trường hợp riêng biệt. TypeScript cung cấp cả enum dạng số và dạng chuỗi enum sốTrước tiên, chúng tôi sẽ bắt đầu với enum số, có thể quen thuộc hơn nếu bạn đến từ các ngôn ngữ khác. Một enum có thể được định nghĩa bằng từ khóa 1
Ở trên, chúng ta có một enum số trong đó 2 được khởi tạo với 3. Tất cả các thành viên sau được tự động tăng từ thời điểm đó. Nói cách khác, 4 có giá trị 3, 6 có giá trị 7, 8 có giá trị 9 và 10 có giá trị 11 Nếu muốn, chúng ta có thể bỏ hoàn toàn các trình khởi tạo 3 Ở đây, 2 sẽ có giá trị 13, 6 sẽ có giá trị 3, v.v. Hành vi tự động gia tăng này hữu ích cho các trường hợp chúng ta có thể không quan tâm đến chính các giá trị thành viên, nhưng hãy quan tâm đến việc mỗi giá trị khác biệt với các giá trị khác trong cùng một enum Sử dụng một enum rất đơn giản. chỉ cần truy cập bất kỳ thành viên nào dưới dạng thuộc tính của chính enum và khai báo các loại bằng tên của enum
Số enums có thể được trộn lẫn trong. Câu chuyện ngắn gọn là, các enum không có bộ khởi tạo cần phải được đặt trước hoặc phải xuất hiện sau các enum số được khởi tạo với các hằng số hoặc các thành viên enum không đổi khác. Nói cách khác, những điều sau đây không được phép 1 Chuỗi enumChuỗi enums là một khái niệm tương tự, nhưng có một số tinh tế như tài liệu dưới đây. Trong một chuỗi enum, mỗi thành viên phải được khởi tạo liên tục bằng một chuỗi ký tự hoặc với một thành viên chuỗi enum khác 0 Mặc dù enum chuỗi không có hành vi tăng tự động, nhưng enum chuỗi có lợi ích là chúng “tuần tự hóa” tốt. Nói cách khác, nếu bạn đang gỡ lỗi và phải đọc giá trị thời gian chạy của một enum số, thì giá trị này thường không rõ ràng - bản thân nó không truyền đạt bất kỳ ý nghĩa hữu ích nào (mặc dù thường có thể hữu ích). Chuỗi enums cho phép bạn đưa ra một giá trị có ý nghĩa và có thể đọc được khi mã của bạn chạy, không phụ thuộc vào tên của chính thành viên enum enum không đồng nhấtVề mặt kỹ thuật, enums có thể được trộn lẫn với các thành viên chuỗi và số, nhưng không rõ tại sao bạn lại muốn làm như vậy 1 Trừ khi bạn đang thực sự cố gắng tận dụng hành vi thời gian chạy của JavaScript một cách thông minh, bạn không nên làm điều này Các thành viên được tính toán và không đổiMỗi thành viên enum có một giá trị được liên kết với nó, có thể là hằng số hoặc được tính toán. Một thành viên enum được coi là hằng số nếu
Trong tất cả các trường hợp khác, thành viên enum được coi là đã tính 1 Union enums và các loại thành viên enumCó một tập hợp con đặc biệt của các thành viên enum không đổi không được tính toán. thành viên enum theo nghĩa đen. Thành viên enum theo nghĩa đen là thành viên enum không đổi không có giá trị khởi tạo hoặc có giá trị được khởi tạo thành
Khi tất cả các thành viên trong một enum có giá trị enum theo nghĩa đen, một số ngữ nghĩa đặc biệt sẽ phát huy tác dụng Đầu tiên là các thành viên enum cũng trở thành các loại. Ví dụ: chúng ta có thể nói rằng một số thành viên chỉ có thể có giá trị của một thành viên enum 9 Sự thay đổi khác là bản thân các loại enum trở thành một liên minh của từng thành viên enum một cách hiệu quả. Với union enums, hệ thống loại có thể tận dụng thực tế là nó biết tập hợp chính xác các giá trị tồn tại trong chính enum. Do đó, TypeScript có thể bắt lỗi khi chúng ta có thể so sánh các giá trị không chính xác. Ví dụ 30 Trong ví dụ đó, trước tiên chúng tôi kiểm tra xem 30 không phải là 31. Nếu việc kiểm tra đó thành công, thì 32 của chúng ta sẽ bị đoản mạch và phần thân của chữ 'nếu' sẽ chạy. Tuy nhiên, nếu kiểm tra không thành công, thì 30 chỉ có thể là 31, vì vậy sẽ không có ý nghĩa gì khi xem liệu nó có bằng với 35 hay không Enums trong thời gian chạyEnums là các đối tượng thực tồn tại trong thời gian chạy. Ví dụ, enum sau 31 thực sự có thể được chuyển đến các chức năng 32 Enums tại thời điểm biên dịchMặc dù Enums là các đối tượng thực tồn tại trong thời gian chạy, nhưng từ khóa 36 hoạt động khác với những gì bạn có thể mong đợi đối với các đối tượng điển hình. Thay vào đó, hãy sử dụng 37 để lấy Loại đại diện cho tất cả các khóa Enum dưới dạng chuỗi 33 ánh xạ ngượcNgoài việc tạo một đối tượng có tên thuộc tính cho các thành viên, các thành viên số enums cũng nhận được ánh xạ ngược từ giá trị enum sang tên enum. Ví dụ, trong ví dụ này 34 TypeScript biên dịch phần này thành JavaScript sau 35 Trong mã được tạo này, một enum được biên dịch thành một đối tượng lưu trữ cả ánh xạ xuôi ( 38 -> 39) và ngược ( 39 -> 38). Các tham chiếu đến các thành viên enum khác luôn được phát ra dưới dạng truy cập thuộc tính và không bao giờ được nội tuyến Hãy nhớ rằng các thành viên chuỗi enum hoàn toàn không nhận được ánh xạ ngược tsenum Direction { Up = 1, Down, Left, Right,}Try42 bảng liệt kêTrong hầu hết các trường hợp, enums là một giải pháp hoàn toàn hợp lệ. Tuy nhiên đôi khi yêu cầu chặt chẽ hơn. Để tránh phải trả chi phí cho mã được tạo thêm và chuyển hướng bổ sung khi truy cập các giá trị enum, có thể sử dụng 42 enum. Const enums được xác định bằng cách sử dụng công cụ sửa đổi 42 trên enums của chúng tôi 36 Const enums chỉ có thể sử dụng các biểu thức enum không đổi và không giống như các enum thông thường, chúng bị loại bỏ hoàn toàn trong quá trình biên dịch. Const enum thành viên được nội tuyến tại các trang web sử dụng. Điều này là có thể vì const enums không thể có các thành viên được tính toán 37 trong mã được tạo sẽ trở thành 38 Const enum cạm bẫyCác giá trị enum nội tuyến lúc đầu rất đơn giản, nhưng đi kèm với các hàm ý tinh vi. Những cạm bẫy này chỉ liên quan đến các const enum xung quanh (về cơ bản là const enums trong các tệp 45) và chia sẻ chúng giữa các dự án, nhưng nếu bạn đang xuất bản hoặc sử dụng các tệp 45, thì những cạm bẫy này có thể áp dụng cho bạn, bởi vì 47 chuyển đổi các tệp 48 thành các tệp 45
Dưới đây là hai cách tiếp cận để tránh những cạm bẫy này A. Hoàn toàn không sử dụng const enums. Bạn có thể dễ dàng với sự giúp đỡ của một kẻ nói dối. Rõ ràng điều này tránh được bất kỳ vấn đề nào với const enums, nhưng ngăn không cho dự án của bạn nội tuyến enums của chính nó. Không giống như nội tuyến enums từ các dự án khác, nội tuyến enums riêng của dự án không có vấn đề gì và có ý nghĩa về hiệu suất. b. Không xuất bản const enum xung quanh, bằng cách giải mã chúng với sự trợ giúp của. Đây là cách tiếp cận được thực hiện nội bộ bởi chính dự án TypeScript. phát ra cùng một JavaScript cho const enums như enums đơn giản. Sau đó, bạn có thể loại bỏ công cụ sửa đổi 42 khỏi tệp 45 một cách an toàn Bằng cách này, người tiêu dùng ở hạ nguồn sẽ không nội tuyến enums từ dự án của bạn, tránh những cạm bẫy ở trên, nhưng một dự án vẫn có thể nội tuyến enums của chính nó, không giống như cấm hoàn toàn const enums môi trường xung quanhAmbient enums được sử dụng để mô tả hình dạng của các loại enum đã tồn tại 39 Một điểm khác biệt quan trọng giữa các enum xung quanh và không xung quanh là, trong các enum thông thường, các phần tử không có bộ khởi tạo sẽ được coi là hằng nếu phần tử enum trước nó được coi là hằng số. Ngược lại, một thành viên enum xung quanh (và không phải const) không có bộ khởi tạo luôn được coi là có tính toán Đối tượng vs EnumsTrong TypeScript hiện đại, bạn có thể không cần enum khi một đối tượng có 19 là đủ 0 Lập luận lớn nhất ủng hộ định dạng này so với 1 của TypeScript là nó giữ cho cơ sở mã của bạn phù hợp với trạng thái của JavaScript và khi/nếu enum được thêm vào JavaScript thì bạn có thể chuyển sang cú pháp bổ sung Tôi có thể sử dụng enum trong JavaScript không?Enums là một trong số ít tính năng mà TypeScript có mà không phải là tiện ích mở rộng ở cấp độ loại của JavaScript . Enums cho phép nhà phát triển xác định một tập hợp các hằng số được đặt tên. Sử dụng enums có thể giúp ghi lại ý định dễ dàng hơn hoặc tạo một tập hợp các trường hợp riêng biệt. TypeScript cung cấp cả enum dạng số và dạng chuỗi.
enum trong ví dụ JavaScript là gì?Enum Sử dụng Đối tượng
. Đối tượng có thể có các cặp khóa-giá trị trong đó khóa có thể được coi là giá trị enum và vấn đề có thể là bất kỳ thứ gì. Ví dụ. Hãy sử dụng một đối tượng Javascript để triển khai một enum cho các hướng như bắc, đông, tây và nam .
Bạn có thể sử dụng == cho enum không?phương thức equals sử dụng toán tử == bên trong để kiểm tra xem hai enum có bằng nhau hay không . Điều này có nghĩa là, Bạn có thể so sánh Enum bằng cả phương thức == và bằng.
Từ khóa enum trong JavaScript là gì?Từ khóa enum khai báo loại liệt kê (không thể thay đổi) . Một enum là một "lớp" đặc biệt đại diện cho một nhóm các hằng số (các biến không thể thay đổi, như các biến cuối cùng). |