質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

4回答

303閲覧

var で宣言するときに、[]を使うのはなぜでしょうか?

neginattofan

総合スコア66

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2019/03/29 03:09

var timers = [];

var timers;

の違いが分かりません。

後者のほうは、のちに初期値を代入するんだろうな、となりますが、

前者のほうは、なぜ空文字にしているのか、分かりません。

ちなみに、該当箇所のコードはこんな感じでした。

var timers = []; function runSlot(n) { timers[n] = setTimeout(function(){ panels[n].children[0].src = 'img/' + cards[Math.floor(Math.random() * cards.length)]; runSlot(n); },50); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

空文字じゃなくて配列ですよ。
変数の宣言(var)と初期化(空配列の代入)を同時に行ってるだけです。

投稿2019/03/29 03:12

編集2019/03/29 07:07
m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/03/29 07:06 編集

あと、「配列で扱うよ」という宣言。 →型宣言のイメージがありましたが私の誤解がありました。 単に空配列を代入してるだけですね。
guest

0

JavaScript

1var timers = []; 2```は、 3```JavaScript 4var timers; 5timers = []; 6```を1行で書いただけです。全く同じです。 7`timers`の中味を空配列にしたいから、`[]`を代入しているだけです。 8 9`timers`の中味を空配列にしたいかどうかは、そのプログラムに依ります。空配列じゃなくて`[1,2,3]`にしたければ、`var timers = [1,2,3];`と書くだけ。 10 11JavaScriptの変数に型はないので「配列型と宣言している」わけではありません。 12また、「あとで配列で使うよ」という宣言でもないです。「(あとじゃなくて)今、空配列を代入している」だけです。

投稿2019/03/29 05:36

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/03/29 05:53 編集

もしかしたら下記は私の回答(コメント)への指摘でしょうか。 >また、「あとで配列で使うよ」という宣言でもないです 私のコメントの書き方が悪かったのかもしれませんが「あとで」ではなく、 「追記すると(and)」の意味で”あと「配列で扱うよ」”と書いてます。 「あと、」のように”、”をつけるか「また、」の方が良かったかもしれませんね。
otn

2019/03/29 06:26 編集

失礼しました。「あとで」については誤読でした。すみません。 「配列型変数であるとの宣言」と取られない表現が良いかと思います。 以前、 var x = []; x = なんか配列を返す式; のようなコードを見た事があるので。変数に配列を入れるときは宣言時に空配列を入れる必要があると思っている人が、わずかでしょうが、いるようです。
m.ts10806

2019/03/29 07:05

ご指摘ありがとうございます。 少し調整してみます。
guest

0

後者は、↓とだいたい同じことです。

js

1var timers = undefined;

なので、前者を後者に書き換えると、timers[n][][n]からundefined[n]に書き換わり、エラーが出ると思います。

まあ、[][n]でエラーが出ないのも相当奇怪だとは思いますが、JavaScriptはそういう言語なのです。

投稿2019/03/29 04:03

Lhankor_Mhy

総合スコア35869

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

完全に別物。([追記]完全にではないけど、ビタミン剤と肉料理みたいなもの。同じ"栄養が取れる"けど、一方はその場しのぎ、もう一方は食事。っていう風に違う。)

**[]**を使うと「配列」となる。

だから

JavaScript

1var timers = [];

とあったら配列。

JavaScript

1var timers;

とあったら変数。

入門サイトにもあるよ。これ。


[追記1]

miyabi-sanさんからご指摘いただきました。

どうやら、JavaScriptでは、

JavaScript

1var timer = [];

は、

JavaScript

1var timer; // 変数?として 2timer = []; // 配列にする

と一緒みたいですねぇ。


[追記2]

otnさんからご指摘をいただきました。

なんか、変数の中に配列を入れる感じらしいですね。

JavaScriptって型がないからわかりにくい...orz

投稿2019/03/29 03:45

編集2019/03/29 06:42
BeatStar

総合スコア4958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2019/03/29 05:24

低評価の理由が聞きたいです...
miyabi-sun

2019/03/29 05:25 編集

> `var timers = [];`とあったら配列。 timers君は変数でしょというお気持ち。 変数かつ、配列でもあるというのが正確なところですね。 後者の`var timers;`は変数かつ、undefinedという存在しない値が入っています。
BeatStar

2019/03/29 05:48

miyabi-sanさん ありがとうございます。 >> 変数かつ、配列でもあるというのが正確なところですね。 んー? ちょっと意味が...と思っていて、otnさんの回答を見て納得しました。 あー、そういう意味ですか。 本来(?)は変数だけど、それを [] で配列にしているだけ。っていう。 JavaScriptってそういう考えだったんですねぇ。 なるほど。
miyabi-sun

2019/03/29 05:58

そうですね、+評価入れておきました。
otn

2019/03/29 06:28

> 本来(?)は変数だけど、それを [] で配列にしているだけ。 じゃなくて、 「変数に入っているのが配列」ですね。 「変数に入っているのが数値」というのと同様です。
BeatStar

2019/03/29 06:40

otnさん ありがとうございます。 >> 「変数に入っているのが配列」 あー、そういうことか。 C++とかだったら、ある意味、std::list ( JavaならList<> )を持った構造体みたいな状態ですか。 なるほど。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問