Как создать константу в javascript

Я разрабатываю несколько классов, и для некоторых данных я хочу использовать постоянные поля.

Теперь, AS USUAL, IE не поддерживает ключ const, поэтому

const T = 10;

не работает.

Я мог бы создать свойство через __defineGetter__ и __defineSetter__ в mime, но , AS USUAL, IE не поддерживает этот синтаксис (IE 8 имеет Object.defineProperty, но не работает с настраиваемым объектом).

Любая идея?

Ответ 1

"Нет решения" - действительно безопасное решение. Сейчас нет хорошего механизма для создания констант в Javascript, но если вы установите соглашение (ВСЕ ЗАДАЧИ ДЛЯ КОНСТРУКЦИЙ), чтобы помочь идентифицировать их и не перезаписывать их самостоятельно, тогда ваши собственные константы будут в безопасности.

Если вы пишете публичную библиотеку, и вас действительно беспокоит кто-то, изменяющий значение, вы можете использовать закрытую переменную, доступную только для вашего собственного кода, путем управления областью с помощью функции:

(function() {
    var MY_CONSTANT = 42;
    alert(MY_CONSTANT); // alerts "42"
    ...do other stuff in here...
})();
alert(MY_CONSTANT); // alerts "undefined" because MY_CONSTANT is out of scope here

Если разработчик может прочитать значение в javascript, то этот разработчик может изменить это значение.

Ответ 2

Object.defineProperty - это то, что вы хотите.

Пример:

var obj = {};

Object.defineProperty(obj, 'key', {
  enumerable: false,
  configurable: false,
  writable: false,
  value: 'static'
});

Wil определит "obj.key" со значением: "static", и он будет только для чтения.

  • Enumerable означает, что он будет отображаться (или нет) при перечислении свойств объекта.
  • Writable означает, что если вы хотите, чтобы он был только для чтения, вы бы сказали false. не доступен для записи.
  • Настраивается на false, если вы не хотите, чтобы его можно было удалить из объекта.

В сущности, ставя их всех в ложные, вы создаете константы на объекте. Btw, их значения по умолчанию должны быть ложными.

Так эффективно это делать:

Object.defineProperty(obj, 'property', { value: 'value'});

Создает константу в 'obj', называемом 'property' со значением 'value'. Или вы можете это сделать

function setConstant(obj, key, value)
{
    Object.defineProperty(obj, key, {value: value });
}

var obj = {};
setConstant(obj, "constantName", "constantValue");

Сделал бы это очень читаемым.

Ответ 3

В Javascript существует метод freeze(), который можно использовать для создания реальных констант.

Использование:

    var consts = {};                    // Object to store all constants
    consts.MY_CONSTANT= 6;
    Object.freeze(consts);              // Make the consts truly read only
    consts.MY_CONSTANT= 7;              // Trying to do this will give error

Ответ 4

Обратите внимание, что определение чего-то как константы действительно просто гарантирует, что его нельзя перезаписать.

Если вы действительно не можете определить что-то как константу, то просто определите ее как переменную и задайте ее значение один раз. Я предполагаю, что вы пишете код, чтобы вы могли не перезаписывать его...

Не идеально, но это должно сработать.

Ответ 5

Старый вопрос, но в настоящее время можно просто использовать:

const MY_CONST = 10;

Из MDN:

Объявление const создает ссылку на чтение только для значения. Это не означает, что значение, которое оно имеет, является неизменным, просто чтобы идентификатор переменной не мог быть переназначен.

Поддерживается всеми основными браузерами.