如何在JavaScript中声明字符串常量?

How to declare string constants in JavaScript?

本问题已经有最佳答案,请猛点这里访问。

我想在javascript中声明字符串常量。

有办法吗?


许多浏览器的实现(和节点)都有常量,与const一起使用。

1
const SOME_VALUE ="Your string";

这个const意味着不能将它重新分配给任何其他值。

检查兼容性说明以查看您的目标浏览器是否受支持。

或者,您也可以修改第一个示例,使用defineProperty()或它的朋友,并使writable属性false。这意味着变量的内容不能改变,就像常量一样。


javascript中没有常量,但是要声明一个文本,您需要做的就是:

1
var myString ="Hello World";

我不确定您所说的将它们存储在资源文件中是什么意思;这不是一个JavaScript概念。


您在使用jquery吗?是否要在多个javascript文件中使用常量?然后继续读下去。(这是我对相关jquery问题的回答)

有一个称为"getscript"的简便jquery方法。确保使用与从HTML/JSP/ETC文件访问文件时相同的相对路径(即,路径不是相对于放置getscript方法的位置,而是相对于域路径)。例如,对于localhost:8080/mydomain上的应用程序:

1
2
3
$(document).ready(function() {
  $.getScript('/myDomain/myScriptsDir/constants.js');
  ...

然后,如果您在一个名为constants.js的文件中包含此内容:

1
2
3
4
var jsEnum = { //not really an enum, just an object that serves a similar purpose
  FOO :"foofoo",
  BAR :"barbar",
}

现在您可以用打印出"foofoo"

1
jsEnum.FOO


当然,当op提交问题时,这不是一个选项,但是ecmascript 6现在还允许通过"const"关键字来使用常量:

https://developer.mozilla.org/en-us/docs/web/javascript/reference/statements/const

你可以在这里看到EcmaScript 6的采用。


你可以这样做:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
(function() {
    var localByaka;
    Object.defineProperty(window, 'Byaka', {
        get: function() {
            return localByaka;
        },
        set: function(val) {
            localByaka = window.Byaka || val;
        }
    });
}());
window.Byaka ="foo"; //set constant
window.Byaka ="bar"; // try resetting it for shits and giggles
window.Byaka; // will allways return foo!

如果您在全局范围内这样做,这将是一个真正的常量,因为您不能覆盖window对象。

我已经创建了一个库来用JavaScript创建常量和不可变对象。它仍然是0.2版,但它的技巧很好。http://beckafly.github.io/绝缘JS


从ecmascript 2015(a.k.a es6)开始,您可以使用const

1
const constantString = 'Hello';

但并非所有浏览器/服务器都支持这一点。为了支持这一点,请使用像babel这样的polyfill库。


内置对象的标准冻结函数可用于冻结包含常量的对象。

1
2
3
4
5
6
var obj = {
    constant_1 : 'value_1'
};
Object.freeze(obj);
obj.constant_1 = 'value_2';   //Silently does nothing
obj.constant_2 = 'value_3';   //Silently does nothing

在严格模式下,在不可变对象上设置值会引发类型错误。有关详细信息,请参阅https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/object/freeze


使用全局命名空间或类似于常量的全局对象。

1
var Constants = {};

并使用定义对象写入函数,该函数将向该对象添加所有属性并为其赋值。

1
2
3
4
5
6
function createConstant (prop, value) {
    Object.defineProperty(Constants , prop, {
      value: value,
      writable: false
   });
};


给这只猫剥皮的方法太多了。你可以在一个闭幕式中这样做。这段代码将为您提供一种只读的、有名称空间的方法来拥有常量。在公共区域申报即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//Namespaced Constants
var MyAppName;
//MyAppName Namespace
(function (MyAppName) {
    //MyAppName.Constants Namespace
    (function (Constants) {
        //Private
        function createConstant(name, val) {
            Object.defineProperty(MyAppName.Constants, name, {
                value: val,
                writable: false
            });
        }

        //Public
        Constants.FOO = createConstant("FOO", 1);
        Constants.FOO2 = createConstant("FOO2", 1);

        MyAppName.Constants = Constants;
    })(MyAppName.Constants || (MyAppName.Constants = {}));
})(MyAppName || (MyAppName = {}));

使用:

1
2
3
console.log(MyAppName.Constants.FOO);       //prints 1
MyAppName.Constants.FOO = 2;
console.log(MyAppName.Constants.FOO);       //does not change - still prints 1


可以使用对象的冻结方法创建常量。例如:

1
2
var configObj ={timeOut :36000};
Object.freeze(configObj);

这样,您就不能更改configobj。


只需声明超出任何JS函数范围的变量。这些变量将是全局的。