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

How to declare string constants in JavaScript?

本文关键字:声明 字符串 常量 JavaScript      更新时间:2023-09-26

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

有办法吗?

许多浏览器的实现(和Node)都有常量,用于const

const SOME_VALUE = "Your string";

这个const意味着你不能把它重新赋值给任何其他的值。

查看兼容性说明,看看你的目标浏览器是否被支持。

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

你正在使用JQuery吗?你想在多个javascript文件中使用这些常量吗?接着往下读。(这是我对一个相关JQuery问题的回答)

有一个方便的jQuery方法叫做'getScript'。确保你使用相同的相对路径,如果你从你的html/jsp/etc文件访问文件(即路径不是相对于你放置getScript方法,而是相对于你的域名路径)。例如,对于位于localhost:8080/myDomain: 的应用程序
$(document).ready(function() {
  $.getScript('/myDomain/myScriptsDir/constants.js');
  ...

然后,如果你在一个叫做constants.js的文件中有这个:

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

现在可以用

打印'foofoo'了
jsEnum.FOO

JavaScript中没有常量,但是要声明一个文字,你所要做的就是:

var myString = "Hello World";

我不确定你的意思是将它们存储在资源文件中;

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

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const

您可以在这里看到ECMAScript 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

在严格模式下,在不可变对象上设置值会抛出TypeError。有关详细信息,请参见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze

你可以这样做:

(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!

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

我创建了一个库来创建javascript中的常量和不可变对象。它仍然是0.2版本,但它做得很好。http://beckafly.github.io/insulatejs

启动ECMAScript 2015(即ES6)时,可以使用const

const constantString = 'Hello';

但是不是所有的浏览器/服务器都支持这个。为了支持这一点,使用像Babel这样的polyfill库。

给这只猫剥皮的方法太多了。您可以在闭包中做到这一点。这段代码将为您提供一种只读的、有名称空间的方式来拥有常量。只需在Public区域声明它们。

//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 = {}));

用法:

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

可以使用Object的freeze方法来创建一个常量。例如:

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

使用全局命名空间或全局对象,如Constants

var Constants = {};

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

function createConstant (prop, value) {
    Object.defineProperty(Constants , prop, {
      value: value,
      writable: false
   });
};

在任何js函数的作用域之外声明变量。这些变量将是全局的