JavaScriptで文字列定数を宣言したい。
それを行う方法はありますか?
多くのブラウザの実装(およびNode)には、 const
と共に使用される定数があります。
const SOME_VALUE = "Your string";
このconst
は、他の値に再割り当てできないことを意味します。
compatibility notes をチェックして、対象のブラウザがサポートされているかどうかを確認してください。
あるいは、 defineProperty()
またはそのフレンドを使用して最初の例を変更し、writable
プロパティをfalse
にすることもできます。これは、定数のように変数の内容を変更できないことを意味します。
JavaScriptには定数はありませんが、リテラルを宣言するために必要なことは次のとおりです。
var myString = "Hello World";
リソースファイルに保存することの意味がわかりません。これはJavaScriptの概念ではありません。
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
もちろん、OPが質問を送信したとき、これはオプションではありませんでしたが、ECMAScript 6では、「const」キーワードを使用して定数も使用できるようになりました。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const
ECMAScript 6の採用を確認できます こちら 。
さて、あなたはそれを次のように行うことができます:
(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
組み込みオブジェクトの標準凍結機能を使用して、定数を含むオブジェクトを凍結できます。
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 を参照してください
ECMAScript 2015(別名ES6)以降、const
を使用できます
const constantString = 'Hello';
ただし、すべてのブラウザ/サーバーがまだこれをサポートしているわけではありません。これをサポートするには、Babelのようなポリフィルライブラリを使用します。
この猫の皮を剥ぐ方法はたくさんあります。これはクロージャーで行うことができます。このコードは、定数を持つための読み取り専用の名前空間付きの方法を提供します。 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
グローバル名前空間または定数のようなグローバルオブジェクトを使用します。
var Constants = {};
そして、そのオブジェクトにすべてのプロパティを追加し、値を割り当てるdefineObject書き込み関数を使用します。
function createConstant (prop, value) {
Object.defineProperty(Constants , prop, {
value: value,
writable: false
});
};