How to declare string constants in JavaScript?
我想在javascript中声明字符串常量。
有办法吗?
许多浏览器的实现(和节点)都有常量,与
1 | const SOME_VALUE ="Your string"; |
号
这个
检查兼容性说明以查看您的目标浏览器是否受支持。
或者,您也可以修改第一个示例,使用
javascript中没有常量,但是要声明一个文本,您需要做的就是:
1 | var myString ="Hello World"; |
我不确定您所说的将它们存储在资源文件中是什么意思;这不是一个JavaScript概念。
您在使用jquery吗?是否要在多个javascript文件中使用常量?然后继续读下去。(这是我对相关jquery问题的回答)
有一个称为"getscript"的简便jquery方法。确保使用与从HTML/JSP/ETC文件访问文件时相同的相对路径(即,路径不是相对于放置getscript方法的位置,而是相对于域路径)。例如,对于localhost:8080/mydomain上的应用程序:
1 2 3 | $(document).ready(function() { $.getScript('/myDomain/myScriptsDir/constants.js'); ... |
然后,如果您在一个名为constants.js的文件中包含此内容:
1 2 3 4 | var jsEnum = { //not really an enum, just an object that serves a similar purpose FOO :"foofoo", BAR :"barbar", } |
。
现在您可以用打印出"foofoo"
1 | jsEnum.FOO |
当然,当op提交问题时,这不是一个选项,但是ecmascript 6现在还允许通过"const"关键字来使用常量:
https://developer.mozilla.org/en-us/docs/web/javascript/reference/statements/const
你可以在这里看到EcmaScript 6的采用。
你可以这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | (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! |
。
如果您在全局范围内这样做,这将是一个真正的常量,因为您不能覆盖window对象。
我已经创建了一个库来用JavaScript创建常量和不可变对象。它仍然是0.2版,但它的技巧很好。http://beckafly.github.io/绝缘JS
从ecmascript 2015(a.k.a es6)开始,您可以使用
1 | const constantString = 'Hello'; |
。
但并非所有浏览器/服务器都支持这一点。为了支持这一点,请使用像babel这样的polyfill库。
内置对象的标准冻结函数可用于冻结包含常量的对象。
1 2 3 4 5 6 | 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 |
。
在严格模式下,在不可变对象上设置值会引发类型错误。有关详细信息,请参阅https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/object/freeze
使用全局命名空间或类似于常量的全局对象。
1 | var Constants = {}; |
号
并使用定义对象写入函数,该函数将向该对象添加所有属性并为其赋值。
1 2 3 4 5 6 | function createConstant (prop, value) { Object.defineProperty(Constants , prop, { value: value, writable: false }); }; |
号
给这只猫剥皮的方法太多了。你可以在一个闭幕式中这样做。这段代码将为您提供一种只读的、有名称空间的方法来拥有常量。在公共区域申报即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | //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 = {})); |
。
使用:
1 2 3 | console.log(MyAppName.Constants.FOO); //prints 1 MyAppName.Constants.FOO = 2; console.log(MyAppName.Constants.FOO); //does not change - still prints 1 |
可以使用对象的冻结方法创建常量。例如:
1 2 | var configObj ={timeOut :36000}; Object.freeze(configObj); |
这样,您就不能更改configobj。
只需声明超出任何JS函数范围的变量。这些变量将是全局的。