1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

JavaScriptで名前に数値が含まれるグローバル変数をループで動的に呼び出すコツ

1
Last updated at Posted at 2023-08-02

背景

過去にJavaScriptを使って動的にグローバル変数を呼び出そうとした際、とある初歩的な内容で困ったことが印象的だったため、自分への備忘録を兼ねて記事に残すことにした。

例題

以下のようなコードを実装しようとしていた。

// 変数はグローバル変数とする。
var a1 ="aa1";
var a2 ="aa2";
var a3 ="aa3";
・
・
・
var a98 ="aa98";
var a99 ="aa99";
var a100 ="aa100";
var array = ["aa0"];
for (var x = 1; x <= 100; x++) {
	//変数xを使って、 array配列に変数a1~a100の値を順番に入れたい。
  //最終結果:array = ["aa0","aa1","aa2","aa3",・・・,"aa98","aa99","aa100"]
  //ただし、array.push(a1); ・・・array.push(a100); のように、
  //a1~a100の変数を代入するコードを1行ずつ直接記載するのは無しとする。
}

困った理由

今までは「特定のタイミングで特定のグローバル変数を指定して呼び出す」ことが確定していたため、該当のグローバル変数を直接指定することで解決できていた。
しかし、今回のようにループ条件(変数xの値)のみで動的に特定のグローバル変数を呼び出す方法が不明だったため、とても困った。
※「array.push(a1);」 などを1つずつ書くのはメンテナンスが大変そうであり、可能な限り数行で抑えたかった。

解答例

以下のように記載することで対応可能。

// 変数はグローバル変数とする。
var a1 ="aa1";
var a2 ="aa2";
var a3 ="aa3";
・
・
・
var a98 ="aa98";
var a99 ="aa99";
var a100 ="aa100";
var array = ["aa0"];
for (var x = 1; x <= 100; x++) {
	//呼び出したい変数名を文字列で確保する変数を作成
	var variablename = "a" + x;
	//変数名から該当変数を呼び出す
	array.push(window[variablename]);
}

解説

「window[変数名]」で、「変数名」を持つ変数の値を参照しているが、これはJavaScriptのグローバル変数の仕組みがカギとなっている。

基本、グローバル変数を宣言する場合は、「var 変数名 = 値」のように宣言するのが一般的だが、この宣言方法は「var window.変数名 = 値」の短縮版となっている。
(この時の「window」は、「windowオブジェクト」と呼ぶ。)

短縮版(var 変数名 = 値)でグローバル変数を宣言した場合でも、本来の宣言方法(var window.変数名 = 値)で内部上処理されているため、解答例のように[]内に変数名の文字列を記載することで本件は解決できる。

まとめ

結果論だが、1,2行のコードで解決できる問題だった。
しかし、Javascriptに初めて触れてから約4年以上経っており、グローバル変数に関しては一通り認識していたつもりだったが、意外と根本的なところでつまずく結果となった。
今回のように、「初歩的だが、内部の具体的な処理方法を理解しきれていない」ことが他でも当てはまりそうなため、他の課題にぶつかった際も、今回のように原点回帰して解決策を探してみようと思う。

参考文献

グローバルオブジェクト | 現代の JavaScript チュートリアル

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?