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

时间:2012-01-14 13:21:11

标签: javascript

const Name = 'Name ';
const Name_USER_PASSWORD = 'Name ';
const Name= 'Name ';
const USER_FULL_NAME = 'FullName';

我的项目中有50个这样的常量,但我认为有更好的方法可以通过javascript中的某些技术来适应它。就像将它们放入原型或其他东西一样。

2 个答案:

答案 0 :(得分:0)

我不使用const关键字来声明公共常量,因为全局命名空间会被污染。

我推荐的定义常量的方法是使用Object.defineProperty方法,并回退属性赋值方法。另外,我对常量使用特殊值:对象文字({})。这个值的目的在本答案的最后解释。

// ... 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 = {};
}

检查常数:

if (setting === MyNS.CONSTANT) // .... Rest of logic

这种方法的优点是什么?

使用此方法,用户无法对常量值进行硬编码(这可能导致意外的,难以调试的错误)。

比较将始终返回false ,除非该变量确实指向MyNS.CONSTANT1

另一个应用程序是具有动态数量的参数的函数。比如说,您想创建一种具有可配置选项的console.log函数。使用字符串/数字/ ...常量值将导致可能的错误 例如:

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

答案 1 :(得分:0)

如果您正在寻找一种组织常量的方法,您可以将它们作为一个或多个对象的属性,例如:

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"

当然myConstants是一个非常蹩脚的名字,但你明白了......