web-dev-qa-db-ja.com

JavaScriptで文字列定数を宣言する方法は?

JavaScriptで文字列定数を宣言したい。

それを行う方法はありますか?

93

多くのブラウザの実装(およびNode)には、 const と共に使用される定数があります。

const SOME_VALUE = "Your string";

このconstは、他の値に再割り当てできないことを意味します。

compatibility notes をチェックして、対象のブラウザがサポートされているかどうかを確認してください。

あるいは、 defineProperty() またはそのフレンドを使用して最初の例を変更し、writableプロパティをfalseにすることもできます。これは、定数のように変数の内容を変更できないことを意味します。

123
alex

JavaScriptには定数はありませんが、リテラルを宣言するために必要なことは次のとおりです。

var myString = "Hello World";

リソースファイルに保存することの意味がわかりません。これはJavaScriptの概念ではありません。

8
Esteban Araya

JQueryを使用していますか?複数のjavascriptファイルで定数を使用しますか?次に読み進めてください。 (これは関連するJQueryの質問に対する私の答えです)

「getScript」と呼ばれる便利なjQueryメソッドがあります。 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
5
MattC

もちろん、OPが質問を送信したとき、これはオプションではありませんでしたが、ECMAScript 6では、「const」キーワードを使用して定数も使用できるようになりました。

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

ECMAScript 6の採用を確認できます こちら

4
Simon

さて、あなたはそれを次のように行うことができます:

(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

3
Beckafly

組み込みオブジェクトの標準凍結機能を使用して、定数を含むオブジェクトを凍結できます。

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 を参照してください

2
Mohit

ECMAScript 2015(別名ES6)以降、constを使用できます

const constantString = 'Hello';

ただし、すべてのブラウザ/サーバーがまだこれをサポートしているわけではありません。これをサポートするには、Babelのようなポリフィルライブラリを使用します。

2
Ryan Rho

この猫の皮を剥ぐ方法はたくさんあります。これはクロージャーで行うことができます。このコードは、定数を持つための読み取り専用の名前空間付きの方法を提供します。 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
0
Simon

グローバル名前空間または定数のようなグローバルオブジェクトを使用します。

var Constants = {};

そして、そのオブジェクトにすべてのプロパティを追加し、値を割り当てるdefineObject書き込み関数を使用します。

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