在JavaScript中用其他常量替换常量
我的项目中有这样50个常量,但我认为有没有更好的方法用javascript中的一些技术来适应它。比如把它们放进原型或者其他东西里 我不使用在JavaScript中用其他常量替换常量,javascript,Javascript,我的项目中有这样50个常量,但我认为有没有更好的方法用javascript中的一些技术来适应它。比如把它们放进原型或者其他东西里 我不使用const关键字来声明公共常量,因为全局名称空间将被污染 我推荐的定义常量的方法是使用该方法,并回退到属性赋值方法。此外,我对常量使用特殊值:对象文本({})。该值的用途在本答案的末尾解释 const Name = 'Name '; const Name_USER_PASSWORD = 'Name '; const Name= 'Name '; const U
const
关键字来声明公共常量,因为全局名称空间将被污染
我推荐的定义常量的方法是使用该方法,并回退到属性赋值方法。此外,我对常量使用特殊值:对象文本({}
)。该值的用途在本答案的末尾解释
const Name = 'Name ';
const Name_USER_PASSWORD = 'Name ';
const Name= 'Name ';
const USER_FULL_NAME = 'FullName';
要对照常数进行检查:
// ... created a class, object, or somethin, say MyNS
// You could write a method to implement the following constant-definition method
if (Object.defineProperty) { // Yay, ES5!
Object.defineProperty(MyNS, 'CONST', {
value: {},
enumerable: true, // Default false. Are the props visible, eg in a for-loop?
writable: false, // Default false, constants should be CONSTANT
configurable: false// Default false, prevent deletion of the constant, etc.
});
} else { // If ES is not supported:
MyNS.CONST = {};
}
这种方法的优点是什么?
使用此方法,用户无法硬编码常量值(这可能导致意外的、难以调试的错误)
除非变量确实指向MyNS.CONSTANT1
,否则比较将始终返回false
另一个应用程序是具有动态参数数的函数。比如说,您想创建一种带有可配置选项的console.log
函数。使用字符串/数字/。。。常量值将导致可能的错误。例如:
var log.CONST=1;
函数日志(){
对于(var i=0;i如果您正在寻找一种方法来组织常数,则可以将其作为一个或多个对象的属性,例如:
var log.CONST = 1;
function log() {
for (var i=0; i<arguments.length; i++) {
if (arguments[i] === log.CONST) ...some logic...
}
}
log(1); // 1 is the value of log.CONST, the function will FAIL.
// Fix: If you were using log.CONST = {}, the assertion will only be true
// when the argument === log.CONST
或者更复杂的分组示例:
var myConstants = {
NAME : "name",
NAME_USER_PASSWORD : "password here",
USER_FULL_NAME : "Joe Jones",
ETC : "Other constant"
};
console.log( myConstants.USER_FULL_NAME ); // "Joe Jones"
当然,myConstants
是一个相当蹩脚的名字,但是你知道了……@SergioTulentsev:我可以用别的东西代替const吗……我的意思是用另一种方式来表达这是你想要的讨论:[[1]:不广泛支持const
关键字。请改用var
。一个常见的惯例(您似乎部分遵循了这一惯例)是对“常量”名称使用所有大写字母。
var myConstants = {
NAME : "name",
NAME_USER_PASSWORD : "password here",
USER_FULL_NAME : "Joe Jones",
ETC : "Other constant"
};
console.log( myConstants.USER_FULL_NAME ); // "Joe Jones"
var myConstants = {
DB : {
CONNECTION_STRING : "something",
USER : "name",
PASSWORD : "password here"
},
COLOR : {
BLACK : "#000000",
RED : "#FF0000",
WHITE : "#FFFFFF"
}
};
console.log( myConstants.DB.PASSWORD ); // "password here"