Comment puis-je garantir que ma définition d'énumération ne s'applique pas à JavaScript

Mots clés : javascriptjavascript

meilleur 4 Réponses Comment puis-je garantir que ma définition d'énumération ne s'applique pas à JavaScript

vote vote

96

const DaysEnum = Object.freeze({"monday":1, "tuesday":2, "wednesday":3, ...}) 
const DaysEnum = {"monday":1, "tuesday":2, "wednesday":3, ...} Object.freeze(DaysEnum) 
let day = DaysEnum.tuesday day = 298832342 // goes through without any errors 
vote vote

85

if (currentColor == my.namespace.ColorEnum.RED) {    // alert name of currentColor (RED: 0)    var col = my.namespace.ColorEnum;    for (var name in col) {      if (col[name] == col.RED)        alert(name);    } } 
var SIZE = {   SMALL : {value: 0, name: "Small", code: "S"},    MEDIUM: {value: 1, name: "Medium", code: "M"},    LARGE : {value: 2, name: "Large", code: "L"} };  var currentSize = SIZE.MEDIUM; if (currentSize == SIZE.MEDIUM) {   // this alerts: "1: Medium"   alert(currentSize.value + ": " + currentSize.name); } 
// Add EXTRALARGE size SIZE.EXTRALARGE = {value: 3, name: "Extra Large", code: "XL"}; 
// Add 'Extra Large' size, only knowing it's name var name = "Extra Large"; SIZE[name] = {value: -1, name: name, code: "?"}; 
for (var sz in SIZE) {   // sz will be the names of the objects in SIZE, so   // 'SMALL', 'MEDIUM', 'LARGE', 'EXTRALARGE'   var size = SIZE[sz]; // Get the object mapped to the name in sz   for (var prop in size) {     // Get all the properties of the size object, iterates over     // 'value', 'name' and 'code'. You can inspect everything this way.           } }  
vote vote

79

var DaysEnum = {"monday":1, "tuesday":2, "wednesday":3, ...}  Document.Write("Enumerant: " + DaysEnum.tuesday); 
DaysEnum.monday = 4; // whoops, monday is now thursday, too 
vote vote

67

function Enum(constantsList) {     for (var i in constantsList) {         this[constantsList[i]] = i;     } } 
var YesNo = new Enum(['NO', 'YES']); var Color = new Enum(['RED', 'GREEN', 'BLUE']); 
Enum.prototype.values = function() {     return this.allValues;     /* for the above to work, you'd need to do             this.allValues = constantsList at the constructor */ }; 
function Enum() {     for (var i in arguments) {         this[arguments[i]] = i;     } }  var YesNo = new Enum('NO', 'YES'); var Color = new Enum('RED', 'GREEN', 'BLUE'); 

Questions similaires