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

时间:2011-04-26 04:46:58

标签: javascript constants

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

有没有办法做到这一点?

11 个答案:

答案 0 :(得分:119)

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

const SOME_VALUE = "Your string";

const表示您无法将其重新分配给任何其他值。

检查compatibility notes以查看您的目标浏览器是否受支持。

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

答案 1 :(得分:8)

JavaScript中没有常量,但要声明文字,您只需要:

var myString = "Hello World";

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

答案 2 :(得分:5)

您使用的是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

答案 3 :(得分:4)

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

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

您可以看到ECMAScript 6的采用here

答案 4 :(得分:3)

嗯,你可以这样做:

(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

答案 5 :(得分:2)

内置Object的标准冻结功能可用于冻结包含常量的对象。

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

答案 6 :(得分:2)

启动ECMAScript 2015(a.k.a ES6),您可以使用const

const constantString = 'Hello';

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

答案 7 :(得分:0)

为这只猫皮肤涂这么多方法。你可以在一个闭包中做到这一点。此代码将为您提供一个只读,命名空间的方法来获取常量。只需在 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

答案 8 :(得分:0)

使用全局命名空间或全局对象,如常量。

var Constants = {};

使用defineObject write函数,它将向该对象添加所有属性并为其赋值。

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

答案 9 :(得分:-1)

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

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

这样你就无法改变configObj。

答案 10 :(得分:-4)

只需在任何js函数的范围之外声明变量。这些变量将是全球性的。

相关问题