在JavaScript中用其他常量替换常量

在JavaScript中用其他常量替换常量,javascript,Javascript,我的项目中有这样50个常量,但我认为有没有更好的方法用javascript中的一些技术来适应它。比如把它们放进原型或者其他东西里 我不使用const关键字来声明公共常量,因为全局名称空间将被污染 我推荐的定义常量的方法是使用该方法,并回退到属性赋值方法。此外,我对常量使用特殊值:对象文本({})。该值的用途在本答案的末尾解释 const Name = 'Name '; const Name_USER_PASSWORD = 'Name '; const Name= 'Name '; const U

我的项目中有这样50个常量,但我认为有没有更好的方法用javascript中的一些技术来适应它。比如把它们放进原型或者其他东西里

我不使用
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"