11

Существуют ли константы в JavaScript?

12

Вопрос о использовании констант в JavaScript

Существует ли способ использования констант в JavaScript?

Если нет, какова общепринятая практика для задания переменных, которые должны использоваться как константы?

5 ответ(ов)

3

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

var CONFIG = (function() {
    var private = {
        'MY_CONST': '1',
        'ANOTHER_CONST': '2'
    };

    return {
        get: function(name) { return private[name]; }
    };
})();

alert('MY_CONST: ' + CONFIG.get('MY_CONST'));  // 1

CONFIG.MY_CONST = '2';
alert('MY_CONST: ' + CONFIG.get('MY_CONST'));  // 1

CONFIG.private.MY_CONST = '2';                 // ошибка
alert('MY_CONST: ' + CONFIG.get('MY_CONST'));  // 1

Используя этот подход, значения не могут быть изменены. Однако, вам придется использовать метод get() для доступа к значениям из CONFIG 😦.

Если вам не нужно строго защищать значения переменных, то просто следуйте предложению и используйте соглашение о написании в верхнем регистре (ALL CAPS).

0

Internet Explorer действительно поддерживает константы, хотя и с некоторыми ограничениями. Например, вы можете объявить константу с помощью VBScript, как показано в вашем коде:

<script language="VBScript">
 Const IE_CONST = True
</script>
<script type="text/javascript">
 if (typeof TEST_CONST == 'undefined') {
    const IE_CONST = false;
 }
 alert(IE_CONST);
</script>

В этом примере константа IE_CONST сначала объявляется в VBScript и имеет значение True. При этом в JavaScript, если не объявлена переменная TEST_CONST, константа IE_CONST переопределяется со значением false.

Однако стоит отметить, что это может привести к конфликтам, так как в JavaScript const не разрешает переопределение переменной с тем же именем в одной области видимости. Поэтому, если вы хотите использовать константы в обоих скриптах, будьте осторожны и избегайте одинаковых имен для констант и переменных.

0

В JavaScript, я предпочитаю использовать функции для возврата константных значений. Это может выглядеть следующим образом:

function MY_CONSTANT() {
   return "some-value";
}

alert(MY_CONSTANT());

Такой подход позволяет избежать возможной путаницы с изменением значения константы, а также может быть полезен, если вам нужно изменить логику возврата значения в будущем. Однако, если значение не планируется изменять, то использование переменной const может быть более семантически правильным:

const MY_CONSTANT = "some-value";

alert(MY_CONSTANT);

Таким образом, выбор между функцией и переменной зависит от контекста и ваших предпочтений.

0

Если не против использовать функции, можно реализовать следующий подход:

var constant = function(val) {
    return function() {
        return val;
    }
}

Этот способ создает функции вместо обычных переменных, но гарантирует, что никто не сможет изменить значение после его установки.

a = constant(10);

a(); // 10

b = constant(20);

b(); // 20

Лично мне этот подход кажется довольно удобным, особенно после того, как я привык к такой модели работы с наблюдаемыми значениями в Knockout.

0

Забудьте про IE и используйте ключевое слово const.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь