JavaScript中有常量吗?

时间:2020-03-06 14:41:36  来源:igfitidea点击:

有没有办法在JavaScript中使用常量?

如果没有,指定用作常量的变量的常用惯例是什么?

解决方案

不,不是一般。 Firefox实现了const,但是我不知道IE。

@John指出了一种在其他语言上已经使用了多年的const命名惯例,我认为没有理由不能使用它。当然,这并不意味着某人无论如何也不会覆盖变量的值。 :)

从ES2015开始,JavaScript的概念为const:

const MY_CONSTANT = "some-value";

除IE 8、9和10外,这几乎可以在所有浏览器中使用。有些浏览器可能还需要启用严格模式。

我们可以将var与ALL_CAPS之类的约定结合使用,以表明如果需要支持旧版浏览器或者使用旧代码,则不应修改某些值:

var MY_CONSTANT = "some-value";

我在Greasemonkey脚本中使用const而不是var,但这是因为它们只能在Firefox上运行...
名称约定确实也可以走(我俩都做!)。

有一阵子,我在传递给with()语句的对象常量中指定了"常量"(实际上并不是常量)。我以为它很聪明。这是一个例子:

with ({
    MY_CONST : 'some really important value'
}) {
    alert(MY_CONST);
}

在过去,我还创建了一个CONST命名空间,我会将所有常量放入其中。再次,与开销。嘘。

现在,我只是对KISS执行var MY_CONST ='whatever';`。

我们是否要保护变量不被修改?如果是这样,则可以使用模块模式:

var CONFIG = (function() {
     var private = {
         'MY_CONST': '1',
         'ANOTHER_CONST': '2'
     };

     return {
        get: function(name) { return private[name]; }
    };
})();

alert('MY_CONST: ' + CONFIG.get('MY_CONST'));  // 1

CONFIG.MY_CONST = '2';
alert('MY_CONST: ' + CONFIG.get('MY_CONST'));  // 1

CONFIG.private.MY_CONST = '2';                 // error
alert('MY_CONST: ' + CONFIG.get('MY_CONST'));  // 1

使用这种方法,无法修改值。但是,我们必须在CONFIG :(上使用get()方法。

如果我们不需要严格保护变量值,则按照建议的方法进行操作并使用ALL CAPS的约定。

const关键字在ECMAScript 6草案中,但到目前为止,它仅受浏览器支持的影响:http://kangax.github.io/compat-table/es6/。语法为:

const CONSTANT_NAME = 0;

IE确实支持常量,例如:

<script language="VBScript">
 Const IE_CONST = True
</script>
<script type="text/javascript">
 if (typeof TEST_CONST == 'undefined') {
    const IE_CONST = false;
 }
 alert(IE_CONST);
</script>

在JavaScript中,我更喜欢使用函数返回常量值。

function MY_CONSTANT() {
   return "some-value";
}

alert(MY_CONSTANT());