如何在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将是全球性的。