変数の名称を文字列として取り出す

一般形 var 変数名 = Object.keys({変数})[0];

例1 Object.keys

<script>
function 例1() {
    var 変数 = 123;
    var 変数名 = Object.keys({変数})[0];
    alert(変数名);    // "変数" が表示
}
</script>

<button onClick="例1()">例1</button>

説明


変数の動的定義:文字列を変数名にする

一般形 evai("var " + 文字列 + ";"); → var 文字列; が定義されます。

例2

<script>
function test() {
    // ======= スカラ変数名
    var 文字列 = "変数";
    eval("var " + 文字列 + ";");
    変数 = 10;
    alert("変数 = " + 変数);
    // ======= 配列名
    var 配列名 = "配列";
    eval("var " + 配列名 + " = [];");
    配列[0] = 20;
    alert("配列[0] = " + 配列[0]);
    // ======= こんなこともできる
    var 系列名 = [ "製品A", "製品B" ];
    for (var i = 0; i < 系列名.length; i++) {
        eval("var " + 系列名[i] + " = [];");
        for (var j = 0; j < 3; j++) {
            eval(系列名[i] + "[" + j + "] = " + (30+10*i+j) + ";");
        }
    }
    alert("製品A[0] = " + 製品A[0]);
    alert("製品B[1] = " + 製品B[1]);
}
</script>


<button onClick="例2()">例2</button>
(順に 10, 20, 30, 41 が表示されます。)

説明

eval(文字列) は文字列を数式として評価する組み込み関数ですが、近年は推奨されていません。
まして、このような使い方をするのは不適切だとされています。
しかし、簡潔な方法ですので、私的利用として、勝手に使っています。