С момента написания, октябрь 2014 года - так вот современное решение. Я пишу это решение как модуль узла, и включил тест с использованием Mocha и Chai, а также underscoreJS. Вы можете легко проигнорировать их и просто взять код Enum, если это предпочтительнее.
Видеть много сообщений с чрезмерно запутанными библиотеками и т. Д. Решение получить поддержку перечисления в Javascript настолько просто, что это действительно не нужно , Вот код:
Файл: enums.js
_ = require('underscore');
var _Enum = function () {
var keys = _.map(arguments, function (value) {
return value;
});
var self = {
keys: keys
};
for (var i = 0; i < arguments.length; i++) {
self[keys[i]] = i;
}
return self;
};
var fileFormatEnum = Object.freeze(_Enum('CSV', 'TSV'));
var encodingEnum = Object.freeze(_Enum('UTF8', 'SHIFT_JIS'));
exports.fileFormatEnum = fileFormatEnum;
exports.encodingEnum = encodingEnum;
И тест для иллюстрации того, что он вам дает:
file: enumsSpec.js
var chai = require("chai"),
assert = chai.assert,
expect = chai.expect,
should = chai.should(),
enums = require('./enums'),
_ = require('underscore');
describe('enums', function () {
describe('fileFormatEnum', function () {
it('should return expected fileFormat enum declarations', function () {
var fileFormatEnum = enums.fileFormatEnum;
should.exist(fileFormatEnum);
assert('{"keys":["CSV","TSV"],"CSV":0,"TSV":1}' === JSON.stringify(fileFormatEnum), 'Unexpected format');
assert('["CSV","TSV"]' === JSON.stringify(fileFormatEnum.keys), 'Unexpected keys format');
});
});
describe('encodingEnum', function () {
it('should return expected encoding enum declarations', function () {
var encodingEnum = enums.encodingEnum;
should.exist(encodingEnum);
assert('{"keys":["UTF8","SHIFT_JIS"],"UTF8":0,"SHIFT_JIS":1}' === JSON.stringify(encodingEnum), 'Unexpected format');
assert('["UTF8","SHIFT_JIS"]' === JSON.stringify(encodingEnum.keys), 'Unexpected keys format');
});
});
});
Как вы можете видеть, вы получаете фабрику Enum, вы можете получить все ключи просто, вызвав enum.keys, и вы можете сопоставить сами ключи с целыми константами. И вы можете повторно использовать завод с разными значениями и экспортировать созданные сгенерированные суммы с использованием модульного подхода Node.
Еще раз, если вы просто случайный пользователь или в браузере и т. д., просто возьмите заводскую часть кода, потенциально удалив также библиотеку подчеркивания, если вы не хотите использовать ее в своем коде .
Сообщает вам, что значение присваивается переменной, называемой csrf_token
, которая не была объявлена, например.
csrf_token = 'foo';
В нестрогом режиме это создаст свойство глобального объекта (обычно называемого глобальной переменной), называемого csrf_token
, когда выполняется эта строка кода.
В строгом режиме он выдает ошибку, которую вы видите, потому что строгий режим предотвращает неявное создание глобальных переменных. Вы также можете исправить это, включив в него:
var csrf_token;
в любом месте глобального контекста в том же элементе сценария, что и код ошибки, или предыдущий элемент сценария.