在JavaScript中有使用常量的方法吗?
如果不是,指定用作常量的变量的常见做法是什么?
在JavaScript中有使用常量的方法吗?
如果不是,指定用作常量的变量的常见做法是什么?
当前回答
如果你不介意使用函数:
var constant = function(val) {
return function() {
return val;
}
}
这种方法为您提供函数而不是常规变量,但它保证一旦设置了值,就没有人可以更改值。
a = constant(10);
a(); // 10
b = constant(20);
b(); // 20
我个人觉得这相当令人愉快,特别是在我已经习惯了这种模式之后。
*除非有人在你调用函数常量之前重新定义了它
其他回答
const关键字在javscript语言中可用,但不支持IE浏览器。其余所有浏览器支持。
显然,这表明需要一个标准化的跨浏览器const关键字。
但现在:
var myconst = value;
or
Object['myconst'] = value;
两者似乎都足够了,其他的就像用火箭筒打苍蝇一样。
"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。
有一段时间,我在传递给with()语句的对象字面量中指定了“常量”(实际上仍然不是常量)。我觉得这很聪明。这里有一个例子:
with ({
MY_CONST : 'some really important value'
}) {
alert(MY_CONST);
}
在过去,我还创建了一个CONST名称空间,将所有常量放在其中。还有开销。天哪。
现在,我写var MY_CONST = 'whatever';吻。
然而,没有确切的跨浏览器预定义的方法来做到这一点,你可以通过控制变量的范围来实现,如其他答案所示。
但是我建议使用名称空间来区别于其他变量。这将使与其他变量的碰撞概率降到最低。
正确的命名空间
var iw_constant={
name:'sudhanshu',
age:'23'
//all varibale come like this
}
使用时,它会是iw_constant。name或iw_constant。age
你也可以使用Object.freeze方法阻止添加任何新键或改变iw_constant中的任何键。但是它不支持传统浏览器。
ex:
Object.freeze(iw_constant);
对于较老的浏览器,可以使用polyfill进行冻结方法。
如果你可以调用函数下面是最好的跨浏览器方式定义常量。将对象限定在一个自执行函数中,并为常量返回一个get函数 例:
var iw_constant= (function(){
var allConstant={
name:'sudhanshu',
age:'23'
//all varibale come like this
};
return function(key){
allConstant[key];
}
};
//获取值use Iw_constant ('name')或Iw_constant ('age')
**在这两个例子中,你必须非常注意名称间距,这样你的对象或函数不会被其他库替换。(如果对象或函数本身将被替换,则整个常量将消失)