Существуют ли константы в JavaScript?
Вопрос о использовании констант в JavaScript
Существует ли способ использования констант в JavaScript?
Если нет, какова общепринятая практика для задания переменных, которые должны использоваться как константы?
5 ответ(ов)
Если вы пытаетесь защитить переменные от изменения, то вы можете использовать паттерн модуля:
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).
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
не разрешает переопределение переменной с тем же именем в одной области видимости. Поэтому, если вы хотите использовать константы в обоих скриптах, будьте осторожны и избегайте одинаковых имен для констант и переменных.
В JavaScript, я предпочитаю использовать функции для возврата константных значений. Это может выглядеть следующим образом:
function MY_CONSTANT() {
return "some-value";
}
alert(MY_CONSTANT());
Такой подход позволяет избежать возможной путаницы с изменением значения константы, а также может быть полезен, если вам нужно изменить логику возврата значения в будущем. Однако, если значение не планируется изменять, то использование переменной const
может быть более семантически правильным:
const MY_CONSTANT = "some-value";
alert(MY_CONSTANT);
Таким образом, выбор между функцией и переменной зависит от контекста и ваших предпочтений.
Если не против использовать функции, можно реализовать следующий подход:
var constant = function(val) {
return function() {
return val;
}
}
Этот способ создает функции вместо обычных переменных, но гарантирует, что никто не сможет изменить значение после его установки.
a = constant(10);
a(); // 10
b = constant(20);
b(); // 20
Лично мне этот подход кажется довольно удобным, особенно после того, как я привык к такой модели работы с наблюдаемыми значениями в Knockout.
Забудьте про IE и используйте ключевое слово const
.
Где найти документацию по форматированию даты в JavaScript?
В чем разница между String.slice и String.substring?
Проверка соответствия строки регулярному выражению в JS
Существует ли ссылка на "последнюю" библиотеку jQuery в Google APIs?
Как создать диалог с кнопками "Ок" и "Отмена"