如何在javascript中创建常量

xde*_*000 11 javascript constants

我正在设计一些类,对于某些数据,我想使用不变的字段.

现在,AS USUAL,IE不支持密钥const

const T = 10;
Run Code Online (Sandbox Code Playgroud)

不行.

我可以通过创建一个属性__defineGetter__,并__defineSetter__以默说,但是,像往常一样,IE不支持这种语法(IE 8的Object.defineProperty,但是,自定义对象无法正常工作).

任何的想法?

Pre*_*aul 11

"没有解决方案"是最安全的解决方案.现在没有一个很好的机制来在Javascript中创建常量,但是如果你建立一个约定(ALL CAPS FOR CONSTS)来帮助识别它们并且不自己覆盖它们那么你自己的常量将是安全的.

如果您正在编写公共库,并且您真的担心某人修改某个值,那么您可以通过使用函数控制范围来使用仅可由您自己的代码访问的私有变量:

(function() {
    var MY_CONSTANT = 42;
    alert(MY_CONSTANT); // alerts "42"
    ...do other stuff in here...
})();
alert(MY_CONSTANT); // alerts "undefined" because MY_CONSTANT is out of scope here
Run Code Online (Sandbox Code Playgroud)

如果开发人员可以在javascript中读取值,那么该开发人员可以修改该值.


kau*_*hal 7

Javascript中有一个freeze()方法,可用于创建实际常量.

用法:

    var consts = {};                    // Object to store all constants
    consts.MY_CONSTANT= 6;
    Object.freeze(consts);              // Make the consts truly read only
    consts.MY_CONSTANT= 7;              // Trying to do this will give error
Run Code Online (Sandbox Code Playgroud)


mle*_*ris 7

Object.defineProperty就是你想要的.

例如:

var obj = {};

Object.defineProperty(obj, 'key', {
  enumerable: false,
  configurable: false,
  writable: false,
  value: 'static'
});
Run Code Online (Sandbox Code Playgroud)

Wil定义"obj.key"值:"static",它将是readonly.

  • 可枚举意味着在枚举对象的属性时它将显示(或不显示).
  • 可写意味着如果你想要它只读,你就说错了.不可写
  • 如果您不希望它从对象中删除,则可配置为false.

本质上,通过将它们全部置为假,您将在对象上创建常量.顺便说一句,他们的默认值是假的.

所以有效地这样做:

Object.defineProperty(obj, 'property', { value: 'value'});
Run Code Online (Sandbox Code Playgroud)

将使用值'value'在名为'property'的'obj'上创建一个常量.或者你可以这样做

function setConstant(obj, key, value)
{
    Object.defineProperty(obj, key, {value: value });
}

var obj = {};
setConstant(obj, "constantName", "constantValue");
Run Code Online (Sandbox Code Playgroud)

会让它变得非常易读.