• ベストアンサー

jQuery for内にある配列の後のドットは何?

jQuery(?) for文内で、配列の後にドット演算子があるのですが、これは何でしょうか? for ( var i=0, len=hoge.length; i<len; i++ ) {  hoge[i].max = 5;  hoge[i].count = i; } ・maxはどこにある(属している)のでしょうか? ・hoge配列内? ・そもそもmaxは変数? ・ちなみに、hogeは、getElementsByClassNameで取得しています ・この場合のドット演算子は、セレクタの一種? ・変数に格納しているわけではなくて、DOMを操作しているだけ?

質問者が選んだベストアンサー

  • ベストアンサー
  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.6

>・どういう時にプロパティが存在するか分かっていないのですが、プロパティは「オブジェクト」にしか存在せず「変数」にはない、という理解で合っているでしょうか? >・区分すると「オブジェクト」「オブジェクト以外(=変数)」みたいな分類は可能?  もう、この質問で、様々な概念が完全に混乱しているのが解ります。  まず、最初に、型があります。例えば、数字であるとか、文字列であるとか、オブジェクトであるとかいったものです。関数だって、一つの型だと思えば、型になるんです。とにかく、javasctiptに登場するありとあらゆる物には型があります。  この型を二つに分けます。  プリミティブ型とオブジェクト型です。  プリミティブ型は、簡単に言うと、単純な型です。正確に言うと、数値型・文字列型・undifind型・null型・真偽型のことです。これは、全ての型の中で基礎的な役割を果たします。  そして、オブジェクト型は、他の全ての型です。オブジェクト型は、基本的には、データと操作を一つの型の形にまとめた物です。データのことをプロパティーと言い、操作のことをメソッドと言います。もちろん、プロパティーだけのものも作れますし、メソッドだけのものも作れますし、実際に両方とも存在します。  プロパティーというのは、オブジェクト型に対して定義されたものですから、当然、オブジェクト型にしか存在しません。メソッドもしかりです。  さて、型は、種類を表しただけで、実態を表しません。全ての型は、何らかの形で、生成して実体化する必要があります。生成して実体化した物をインスタンスと呼びます。  例えば、int型と言えば、全ての整数を表します。単なる種類です。  ここで、5と言えば、これは、一つの具体化された整数型の定数です。  実体化して、初めて、演算子の適用も出来ますし、存在するのであればプロパティーの操作やメソッドの呼び出しが出来ます。  さて、インスタンスには、実態を置く場所が必要です。この場所のことを「変数」と言います。(かなりアバウトな表現です。念のため。)  変数には、何でも入れることが出来ます。プリミティブ型でも、オブジェクト型でも、特殊事例として、関数だって入れることが出来ます。    ここで、演算子に関して、補足しておきます。  全ての演算子には、演算子に対して使用できる型が定義されています。(正確には、全ての型には、自分自身に対して使用できる演算子が定義されています。)  あなたが引っかかっていた、メンバー参照のための演算子「.」は、オブジェクト型に対して使用することが出来る演算子です。    さて、変数には、何だって置くことが出来ますから、「何を」おいたかによって、その挙動は全く異なります。  int型を格納した変数に対して、プロパティーを参照しようとしても無駄ですよね。Document型のインスタンスを格納した変数であれば、多数のメソッドとプロパティーが参照できます。  最後に、文字列型に関してだけ補足しておきます。この型は一見、少々風変わりな挙動をします。プリミティブ型なのに、メソッドがあるように見えるんです。「一見」と言ったのには、からくりがあるからです。実は、string型という立派なオブジェクト型が存在します。そして、メソッドやプロパティーの呼び出しがあると、自動的にオブジェクト型に変換されているのです。その時々では、確実にどちらの形かが決まっていますが、文脈に依存するので、識別は少々面倒です。

re97
質問者

お礼

回答いただいたみなさん、どうもありがとうございました。 ・当初質問した疑問については、No.1さんの「domの実態はオブジェクトなので~」で解決しました ・質問した時点では、DOMオブジェクトと、JavaScriptオブジェクトを何か違うもののように捉えていたので、「ドットでメソッドやプロパティを操作できる」ことが自分の頭の中でうまく結びつきませんでした ・「プロパティ」「オブジェクト」「変数」については、JavaScript全体における立ち位置が以前から不明だったため、追加で質問しました >プリミティブ型 ・名前は知っていたのですが、よく分かっていませんでした ・No6さんの解説、大変分かりやすかったです ・解説いただいた内容を元に改めて調べてみたところ、ようやく自分の中で体系化できたような気がします ・今回学んだことは、JavaScriptはまず「プリミティブ型」「オブジェクト型」に分けて考える、ということです(この分類自体は知っていたのですが、その意味を全く理解していませんでした) ・勉強になりましたー

その他の回答 (5)

  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.5

No.4の回答の前半は、なんか混乱させそうな・・・。 maxはメソッドというのはMathオブジェクトについての話だし、 Arrayにcountが無いと言ってもそもそもhoge[i]はArrayではないでしょう。 (それと、仮にArrayで有ったとしても、ユーザーがcountプロパティを追加することは可能。) > jQuery(?) これはjQueryは関係なく、純粋にJavaScriptに関する質問になりますね。 > ・区分すると「オブジェクト」「オブジェクト以外(=変数)」みたいな分類は可能? オブジェクトでないものはプリミティブ(プリミティブ型)です。 プリミティブ型は、numberやstringが含まれます。 オブジェクトだって変数に代入できるのでオブジェクト以外を変数と呼ぶのは変。 ------------------------------------- var a = 0; var b = "abc"; var c = true; var d = {a:0, b:1}; //オブジェクト var e = [0,1,2]; //配列 alert(typeof a); //number alert(typeof b); //string alert(typeof c); //boolean alert(typeof d); //object alert(typeof e); //object

re97
質問者

お礼

回答ありがとうございました >jQueryは関係なく、純粋にJavaScriptに関する質問になりますね ・質問した時点では、もしかしてjQueryセレクタの一種? とか思ってしまいました >オブジェクトでないものはプリミティブ(プリミティブ型) ・質問した時点では「プリミティブ」という概念もキーワードも頭の中になかったです ・参考になりましたー

  • yojkkg
  • ベストアンサー率0% (0/1)
回答No.4

>for文内で、配列の後にドット演算子があるのですが、これは何でしょうか? まずlengthですが lengthはプロパティ(メンバ変数)ですね 参考になりそうなサイトを貼っておきます。 http://www.ajaxtower.jp/js/array_class/index2.html 次にmaxですがmaxはプロパティではなくメソッド(メンバ関数)だと思うので 記述はhoge[i].max(数値1,数値2);となるはずかと思います。 http://www.scollabo.com/banban/jsindex/sample/sample_155.html countに至っては調べてみたのですが 配列オブジェクトのメンバにcountというメソッドもプロパティも見当たりませんでした。 (間違ってたらすいません) ですので恐らく質問主さんの記述は配列オブジェクトの既存プロパティに 値を格納している作業ということではなく 質問主さん自身が新規で自作のmaxというプロパティとcountというプロパティを hogeオブジェクトに追加しているのではないでしょうか? 私は普段オブジェクトリテラルという記述方法でオブジェクトを生成しているので その他のオブジェクトの生成方法は詳しくないのですが 以下のサイトを参考にすれば質問主さん自身が今、何をどうしているのか 見えてくるかもしれません http://www.crystal-creation.com/web-appli/technical-information/programming/javascript/grammar/object/ その他にオブジェクトを理解しやすいサイト貼っておきます http://hakuhin.jp/js.html http://manabukun.net/kyouzai/javascript/js005.html

re97
質問者

お礼

回答ありがとうございましたー

  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.3

 長い式は、一つ一つの要素を順番に読んでいかないといけません。  この程度なら、ここまですることは無いのですが・・・  hoge  これは、配列です。正確には、NodeListです。この型には、[]演算子で、各要素を取得することが出来ます。  ですから、  hoge[i]  の結果は、i番目の要素です。  要素は、一つのクラスです。この要素には、maxやcountプロパティーが存在します。  ですから、  hoge[i].max  で、maxプロパティーが読めますね。わかりにくければ、こうしてみましょうか。  var item = hoge[i];  item.max = 5  でも、同じ事です。  わからなくなったら、()をつけてみるのも、良いかもしれません。この場合は、こうなります。  (hoge[i]).max = 5;  こうすれば、maxがなんなのか、わかりますか?

re97
質問者

補足

回答ありがとうございました ・疑問自体は解決したのですが、ついでに教えてください ・どういう時にプロパティが存在するか分かっていないのですが、プロパティは「オブジェクト」にしか存在せず「変数」にはない、という理解で合っているでしょうか? ・区分すると「オブジェクト」「オブジェクト以外(=変数)」みたいな分類は可能?

  • think49
  • ベストアンサー率59% (285/482)
回答No.2

オブジェクト hoge[i] のプロパティ「max」に値を代入しています。 http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/11_Expressions.html#section-11.2.1 # 余談 re97さんはECMAScriptのかなり深い部分まで質問されていた記憶がありますが、ちゃんと自分の中で知識は整理されているでしょうか。 その時、そのタイミングでの質問への解は得られていると思いますが、基礎知識として定着していないと同じような質問を何度も繰り返すことになります。 率直にいってこの質問はECMAScriptの基礎中の基礎であって全く難しい問題ではありません。 今までの知識が身についていれば、理解できる問題だと思います。

re97
質問者

補足

回答ありがとうございました ・プロパティ自体がよく分かっていないのですが、プロパティは「オブジェクト」にはあるけど「変数」にはない、という理解で合っているでしょうか? ・区分すると「オブジェクト」「オブジェクト以外(=変数)」みたいな分類は可能?

回答No.1

getElementsByNameなど取得した結果はdomの配列です。 なのでhogeの中身はdomです。 domについてはurlを参考にしてください。 domの実態はオブジェクトなのでドットでメソッドやプロパティを操作できます。 というわけでmaxはプロパティです。

参考URL:
http://hakuhin.jp/js/dom.html
re97
質問者

補足

回答ありがとうございました >domの実態はオブジェクトなのでドットでメソッドやプロパティを操作できます ・リンク先参考になりましたー ・追加で、プロパティについて教えてください ・プロパティは「オブジェクト」にはあるけど「変数」にはない、という理解で合っているでしょうか? ・区分すると「オブジェクト」「オブジェクト以外(=変数)」みたいな分類は可能? ※変数 var hoge;の意味です

関連するQ&A