如何在JavaScript中声明string常量?

我想在JavaScript中声明string常量。

有没有办法做到这一点?

许多浏览器的实现(和Node)都有常量,与const

 const SOME_VALUE = "Your string"; 

这个const意味着你不能重新分配给任何其他的值。

检查兼容性说明以查看您的目标浏览器是否受支持。

或者,也可以使用defineProperty()或其朋友修改第一个示例,并将writable属性设置为false 。 这将意味着variables的内容不能像常量那样改变。

在JavaScript中没有常量,但要声明一个字面值,你只需要:

 var myString = "Hello World"; 

我不知道你的意思是把它们存放在一个资源文件中。 这不是一个JavaScript的概念。

你在使用JQuery吗? 你想在多个JavaScript文件中使用常量吗? 然后阅读。 (这是我的一个相关的JQuery问题的答案)

有一个方便的jQuery方法称为“getScript”。 确保你使用相同的相对path,如果你从html / jsp / etc文件访问文件(即path不是相对于放置getScript方法的地方,而是相对于你的域path)。 例如,对于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 

当然,在OP提交这个问题时,这不是一个选项,但是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! 

如果你在全局范围内这样做,这将是一个真正的常量,因为你不能覆盖窗口对象。

我创build了一个库来创build常量和不可变的对象在JavaScript中。 它仍然是0.2版本,但它很好地诀窍。 http://beckafly.github.io/insulatejs

内置Object的标准冻结function可以用来冻结包含常量的对象。

 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(又名ES6),你可以使用const

 const constantString = 'Hello'; 

但是并不是所有的浏览器/服务器都支持这一点。 为了支持这个,使用像Babel这样的polyfill库。

如此多的方法来剥皮这只猫。 你可以在封闭的情况下做到这一点。 这段代码会给你一个只读的命名空间的方式来有常量。 只需在公共区域申报。

 //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 

使用全局命名空间或全局对象,如常量。

 var Constants = {}; 

并使用defineObject的写function,将所有属性添加到该对象,并为其分配值。

 function createConstant (prop, value) { Object.defineProperty(Constants , prop, { value: value, writable: false }); }; 

你可以使用Object的冻结方法来创build一个常量。 例如:

 var configObj ={timeOut :36000}; Object.freeze(configObj); 

这样你就不能改变configObj。

只要声明任何js函数范围之外的variables。 这些variables将是全球性的。