我想在JavaScript中声明字符串常量。
有没有办法做到这一点?
答案 0 :(得分:119)
许多浏览器的实现(和Node)都有常量,与const
一起使用。
const SOME_VALUE = "Your string";
此const
表示您无法将其重新分配给任何其他值。
检查compatibility notes以查看您的目标浏览器是否受支持。
或者,您也可以使用defineProperty()
或其朋友修改第一个示例,并制作writable
属性false
。这意味着变量的内容不能像常量那样改变。
答案 1 :(得分:8)
JavaScript中没有常量,但要声明文字,您只需要:
var myString = "Hello World";
我不确定你将它们存储在资源文件中是什么意思;这不是一个JavaScript概念。
答案 2 :(得分:5)
您使用的是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
答案 3 :(得分:4)
当然,当OP提交问题时,这不是一个选项,但ECMAScript 6现在也允许通过" const"关键字:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const
您可以看到ECMAScript 6的采用here。
答案 4 :(得分:3)
嗯,你可以这样做:
(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
答案 5 :(得分:2)
内置Object的标准冻结功能可用于冻结包含常量的对象。
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
答案 6 :(得分:2)
启动ECMAScript 2015(a.k.a ES6),您可以使用const
const constantString = 'Hello';
但并非所有浏览器/服务器都支持此功能。为了支持这一点,请使用像Babel这样的polyfill库。
答案 7 :(得分:0)
为这只猫皮肤涂这么多方法。你可以在一个闭包中做到这一点。此代码将为您提供一个只读,命名空间的方法来获取常量。只需在 Public 区域声明它们。
//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
答案 8 :(得分:0)
使用全局命名空间或全局对象,如常量。
var Constants = {};
使用defineObject write函数,它将向该对象添加所有属性并为其赋值。
function createConstant (prop, value) {
Object.defineProperty(Constants , prop, {
value: value,
writable: false
});
};
答案 9 :(得分:-1)
您可以使用Object的freeze方法创建常量。例如:
var configObj ={timeOut :36000};
Object.freeze(configObj);
这样你就无法改变configObj。
答案 10 :(得分:-4)
只需在任何js函数的范围之外声明变量。这些变量将是全球性的。