Я хочу объявить строковые константы в JavaScript.
Есть ли способ сделать это?
Я хочу объявить строковые константы в JavaScript.
Есть ли способ сделать это?
Многие реализации браузеров (и Node) имеют константы, используемые с const
.
const SOME_VALUE = "Your string";
Этот const
означает, что вы не можете переназначить его на любое другое значение.
Проверьте заметки о совместимости, чтобы узнать, поддерживаются ли ваши целевые браузеры.
В качестве альтернативы вы также можете изменить первый пример, используя defineProperty()
или своих друзей и создав свойство writable
false
. Это будет означать, что содержимое переменной не может быть изменено, как константа.
В JavaScript нет констант, но для объявления литерала все, что вам нужно сделать, это:
var myString = "Hello World";
Я не уверен, что вы имеете в виду, сохраняя их в файле ресурсов; что это не концепция JavaScript.
Используете ли вы JQuery? Вы хотите использовать константы в нескольких файлах javascript? Тогда читайте дальше. (Это мой ответ для связанного с этим вопроса JQuery)
Существует удобный метод jQuery, называемый 'getScript'. Убедитесь, что вы используете тот же относительный путь, что и при доступе к файлу из файлов html/jsp/etc (т.е. Путь НЕ относится к тому, где вы размещаете метод getScript, но вместо этого по отношению к вашему пути к домену). Например, для приложения на localhost: 8080/myDomain:
$(document).ready(function() {
$.getScript('/myDomain/myScriptsDir/constants.js');
...
то, если у вас есть это в файле с именем constants.js:
var jsEnum = { //not really an enum, just an object that serves a similar purpose
FOO : "foofoo",
BAR : "barbar",
}
Теперь вы можете распечатать 'foofoo' с помощью
jsEnum.FOO
Конечно, это был не вариант, когда ОП подал вопрос, но в ECMAScript 6 теперь также разрешены константы с помощью ключевого слова "const":
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const
Вы можете увидеть принятие ECMAScript 6 здесь.
Ну, вы можете сделать это так:
(function() {
var localByaka;
Object.defineProperty(window, 'Byaka', {
get: function() {
return localByaka;
},
set: function(val) {
localByaka = window.Byaka || val;
}
});
}());
window.Byaka = "foo"; //set constant
window.Byaka = "bar"; // try resetting it for shits and giggles
window.Byaka; // will allways return foo!
Если вы сделаете это как указано выше в глобальной области видимости, это будет истинная константа, потому что вы не можете перезаписать объект окна.
Я создал библиотеку для создания констант и неизменяемых объектов в javascript. Его еще версия 0.2, но это трюк красиво. http://beckafly.github.io/insulatejs
Стандартная функция замораживания встроенного объекта может использоваться для замораживания объекта, содержащего константы.
var obj = {
constant_1 : 'value_1'
};
Object.freeze(obj);
obj.constant_1 = 'value_2'; //Silently does nothing
obj.constant_2 = 'value_3'; //Silently does nothing
В строгом режиме установка значений для неизменяемого объекта вызывает TypeError. Для получения дополнительной информации см. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze
Запуск ECMAScript 2015 (a.k.a ES6), вы можете использовать const
const constantString = 'Hello';
Но не все браузеры/серверы поддерживают это еще. Чтобы поддержать это, используйте библиотеку polyfill, такую как Babel.
Так много способов обмануть этого кота. Вы можете сделать это в закрытии. Этот код предоставит вам доступ к постоянным версиям, доступным только для чтения, с константами. Просто объявите их в общественном месте.
//Namespaced Constants
var MyAppName;
//MyAppName Namespace
(function (MyAppName) {
//MyAppName.Constants Namespace
(function (Constants) {
//Private
function createConstant(name, val) {
Object.defineProperty(MyAppName.Constants, name, {
value: val,
writable: false
});
}
//Public
Constants.FOO = createConstant("FOO", 1);
Constants.FOO2 = createConstant("FOO2", 1);
MyAppName.Constants = Constants;
})(MyAppName.Constants || (MyAppName.Constants = {}));
})(MyAppName || (MyAppName = {}));
Использование:
console.log(MyAppName.Constants.FOO); //prints 1
MyAppName.Constants.FOO = 2;
console.log(MyAppName.Constants.FOO); //does not change - still prints 1
Используйте глобальное пространство имен или глобальный объект, например Constants.
var Constants = {};
И используя функцию write функции defineObject, которая добавит все свойства к этому объекту и присвоит ему значение.
function createConstant (prop, value) {
Object.defineProperty(Constants , prop, {
value: value,
writable: false
});
};
Вы можете использовать метод замораживания объекта Object для создания константы. Например:
var configObj ={timeOut :36000};
Object.freeze(configObj);
Таким образом вы не можете изменить configObj.
Просто объявляйте переменную за пределами любой функции js. Такие переменные будут глобальными.