如何在javascript中创建常量

时间:2009-07-14 13:06:21

标签: javascript constants

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

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

const T = 10;

不行。

我可以通过__defineGetter____defineSetter__创建一个属性,然后进行模仿 , AS USUAL ,IE不支持该语法(IE 8具有Object.defineProperty但不支持自定义对象。)

有什么想法吗?

5 个答案:

答案 0 :(得分: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

如果开发人员可以在javascript中读取值,则该开发人员可以修改该值。

答案 1 :(得分:6)

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

答案 2 :(得分:6)

Object.defineProperty就是你想要的。

例如:

var obj = {};

Object.defineProperty(obj, 'key', {
  enumerable: false,
  configurable: false,
  writable: false,
  value: 'static'
});

Wil使用值定义“obj.key”:“static”,它将是readonly。

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

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

如此有效地做到这一点:

Object.defineProperty(obj, 'property', { value: 'value'});

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

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

var obj = {};
setConstant(obj, "constantName", "constantValue");

会让它变得非常易读。

答案 3 :(得分:2)

请注意,将某些内容定义为常量确实只能确保它不会被覆盖。

如果你真的不能将某个东西定义为常量,那么只需将其定义为变量并将其值设置一次即可。我假设您正在编写代码,因此您可以确保不会覆盖它...

显然不太理想,但它应该有用。

答案 4 :(得分:1)

旧问题,但现在你可以简单地使用:

const MY_CONST = 10;

来自MDN

  

const声明创建对值的只读引用。它并不意味着它拥有的值是不可变的,只是无法重新分配变量标识符。

Supported by已经是所有主流浏览器。