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());