在JavaScript中有使用常量的方法吗?
如果不是,指定用作常量的变量的常见做法是什么?
在JavaScript中有使用常量的方法吗?
如果不是,指定用作常量的变量的常见做法是什么?
当前回答
关键字“const”早前就被提出了,现在它已经被正式包含在ES6中。通过使用const关键字,可以传递一个作为不可变字符串的值/字符串。
其他回答
好吧,这很难看,但它给了我一个在Firefox和Chromium中的常量,一个在Safari和Opera中的非常量(WTF?),以及一个在IE中的变量。
当然eval()是邪恶的,但是没有它,IE会抛出一个错误,阻止脚本运行。
Safari和Opera支持const关键字,但您可以更改const的值。
在本例中,服务器端代码将JavaScript写入页面,用一个值替换{0}。
try{
// i can haz const?
eval("const FOO='{0}';");
// for reals?
var original=FOO;
try{
FOO='?NO!';
}catch(err1){
// no err from Firefox/Chrome - fails silently
alert('err1 '+err1);
}
alert('const '+FOO);
if(FOO=='?NO!'){
// changed in Sf/Op - set back to original value
FOO=original;
}
}catch(err2){
// IE fail
alert('err2 '+err2);
// set var (no var keyword - Chrome/Firefox complain about redefining const)
FOO='{0}';
alert('var '+FOO);
}
alert('FOO '+FOO);
这有什么好处?没有太多,因为它不是跨浏览器的。在最好的情况下,至少有些浏览器不允许bookmarklet或第三方脚本修改该值,这可能会让人稍微安心一些。
通过Firefox 2,3,3.6, 4, Iron 8, Chrome 10,12, Opera 11, Safari 5, IE 6,9测试。
关键字“const”早前就被提出了,现在它已经被正式包含在ES6中。通过使用const关键字,可以传递一个作为不可变字符串的值/字符串。
除了上面提到的,Rhino.js还实现了const。
"use strict";
var constants = Object.freeze({
"π": 3.141592653589793 ,
"e": 2.718281828459045 ,
"i": Math.sqrt(-1)
});
constants.π; // -> 3.141592653589793
constants.π = 3; // -> TypeError: Cannot assign to read only property 'π' …
constants.π; // -> 3.141592653589793
delete constants.π; // -> TypeError: Unable to delete property.
constants.π; // -> 3.141592653589793
看到Object.freeze。如果想让常量引用只读,也可以使用const。
从ES2015开始,JavaScript有了const的概念:
const MY_CONSTANT = "some-value";
这将工作在几乎所有的浏览器除了ie8, 9和10。有些可能还需要启用严格模式。
如果你需要支持旧的浏览器或使用遗留代码,你可以使用var和像ALL_CAPS这样的约定来表明某些值不应该被修改:
var MY_CONSTANT = "some-value";