JavaScript 中有常量吗?

IT技术 javascript constants
2021-02-03 04:51:34

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

如果不是,指定用作常量的变量的常见做法是什么?

6个回答

ES2015 开始,JavaScript 有一个概念const

const MY_CONSTANT = "some-value";

几乎适用于除 IE 8、9 和 10 之外的所有浏览器有些可能还需要启用严格模式

您可以使用varALL_CAPS 等约定来表明如果您需要支持旧浏览器或正在使用旧代码,则不应修改某些值:

var MY_CONSTANT = "some-value";
如今(3.5 年后),您可以Object.defineProperty用来创建也无法删除的只读属性。这适用于所有主要浏览器的当前版本(但在 IE8 中不正确)。请参阅@NotAName 的答案
2021-03-17 04:51:34
由于这个答案在 2015 年仍然被谷歌高度评价,所以现在应该说它已经过时了。const关键字现在正式成为语言的一部分,每个浏览器都支持。据 statcounter.com 称,只有少数互联网用户仍在使用不支持const.
2021-03-20 04:51:34
请注意,如果您不需要跨浏览器兼容性(或者您正在使用 Rhino 或 Node.js 进行服务器端编程),则可以使用const关键字。目前,除 IE 之外的所有现代浏览器都支持它。
2021-04-04 04:51:34

您是否试图保护变量不被修改?如果是这样,那么您可以使用module模式:

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() 方法:(。

如果您不需要严格保护变量值,那么只需按照建议进行操作并使用全部大写的约定。

我确实相信这private是 JavaScript 中未来的保留字,如果我是你,我不会使用它。
2021-03-31 04:51:34
CONFIG.get = someNewFunctionThatBreaksTheCode...总而言之,您绝对不能在 JS 中强制使用常量(没有 const 关键字)。您几乎唯一能做的就是限制能见度。
2021-04-08 04:51:34

const关键字在ECMAScript 6 草案中,但到目前为止它只享有少量浏览器支持:http : //kangax.github.io/compat-table/es6/语法是:

const CONSTANT_NAME = 0;
如果您尝试为 a 赋值const,它不会抛出任何错误。赋值失败,常量仍然具有其原始值。恕我直言,这是一个主要的设计缺陷,但只要有一个清晰、一致的命名约定(例如流行的 ALL_CAPS),我认为它不会引起太多的悲伤。
2021-04-07 04:51:34
"use strict";

var constants = Object.freeze({
    "π": 3.141592653589793 ,
    "e": 2.718281828459045 ,
    "i": Math.sqrt(-1)
});

constants.π;        // -> 3.141592653589793
constants.π = 3;    // -> TypeError: Cannot assign to read only property 'π' …
constants.π;        // -> 3.141592653589793

delete constants.π; // -> TypeError: Unable to delete property.
constants.π;        // -> 3.141592653589793

请参阅Object.freeze如果您想让参考成为只读,也可以使用constconstants

应该提到这仅适用于 IE9+ kangax.github.io/compat-table/es5
2021-03-20 04:51:34

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>
@Cooluhuru 这个脚本似乎可以处理 IE 浏览器(使用 VBScript)和非 IE 浏览器(使用 JavaScript const)。你能解释一下它有什么问题吗?
2021-03-13 04:51:34
脚本?那是什么?;)
2021-03-25 04:51:34
男孩,谈论一些不是跨浏览器的东西。. . 仍然+1 认为有点跳出框框。
2021-03-26 04:51:34
我仍然很难接受常量是可以改变的。
2021-03-26 04:51:34
我通常会否决一般相关的跨浏览器问题,并附上 IE 特定的答案。因为我讨厌那些认为 IE javascript 实现是“唯一”的人,而其他人只是被忽略。谁在使用 IE 以外的其他浏览器,顺便说一句?
2021-04-03 04:51:34