• ベストアンサー

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

  • 2次元のJSON形式の配列の展開

    JSON形式で受け取った2次元配列をHTMLに書き出そうとしています。 配列を指定するカラム名?を変数にしたいのですがうまくできません。 var hoge = "abc"; var len = result.length; for (i = 0; i < len; i++){  objResult.append("<li><a href=" + result[i].ID + ">" + result[i].hoge + "</a></li>"); } ※objResultはul要素を変数に収めたものです。 JSONデータは1列目のカラム名は『ID』で固定ですが2列目は変動する為、上記の『hoge』の部分にはJSONデータを受け取る前にカラム名を別処理で取得して格納しています。 ご教授の程よろしくお願いします。

  • jQueryの配列の渡し方について

    jQueryでの配列の渡し方についてご質問です。 jQueryではなくjavascriptでも良いのですが、不慣れなのでjQueryで試行しています。 ---------------------------------------------- targettab = targettab.split( ',' ); jQuery.each(targettab, function(i, val) { var livetab = "<li id='" + i + "'>" + val + "</li>"; jQuery(livetab).appendTo(jQuery("ul#tab")); }); ---------------------------------------------- ※変数 targettab に「あああ,いいい,うううう]という値が入っています。 こう↑書きますと、ul#tabの内部に <li id='1'>あああ</li> <li id='2'>いいい</li> <li id='3'>ううう</li> と入り、リストが生成されます。 ここまでは良いのですが、このそれぞれのidに入っている数字を任意の文字列にしたいです。 例えば、 targetstrings = "hoge,foo,dummy"; targetstrings = targetstrings.split( ',' ); という配列を差し込んで、最終的に <li id='hoge'>あああ</li> <li id='foo'>いいい</li> <li id='dummy'>ううう</li> という形で整形したいです。 jQuery.eachでは、そもそもできないような気がしていますが、 お知恵を拝借できましたら、大変ありがたいです。 拙い説明で恐縮ですが、どうぞよろしくお願いします。 不明点などあれば、何なりとお知らせください。

  • 配列長参照のオーバーヘッド

    for等ループでループ終了条件に配列長を使用する場合、配列長を毎回参照する場合と一旦変数に格納して参照する場合、定数を使用する場合と処理速度の差はありますか? つまり 1、for( int i = 0; i < array.length; i++ ) { ... } 2、for( int i = 0; i < len; i++ ) { ... } *(int len=array.length) 3、for( int i = 0; i < 10; i++ ) { ... } *(int[] array = new int[10]) forループ内の処理のメモリ使用量の多寡は不明で、毎ループで読み取られる全ての変数はコンピュータのキャッシュに残るかどうかは不明だとします。

    • ベストアンサー
    • Java
  • rubyで配列名をfor文で変更したい

    ruby(というかプログラミング)初心者です。 つまづいてしまったところがあり質問をさせていただきました。 hoge0、hoge1、hoge2 の3つの配列があります。 これをfor文の中で次のように利用したいと思いました。 for i in 0..2  hoge=hoge ??? i ←不明な点 (例)hoge=hoge0 としたい    ・    ・    ・ end つまり変数iを利用して配列名を順次変えていきたいのですがどうすればいいでしょうか。 hoge="hoge#{i}"としたら文字列hoge0が代入されるだけですし、hoge+iのような書き方もできません。 お時間あるときで結構ですのでお教えください。

  • jqueryのajax()内からグローバル配列に

    jqueryのajax(){success: function()内からグローバル連想配列に値を格納したい。 jqueryのajax()でhtmlファイルを読み込み配列に格納。 その後他の関数で使いたいと考えていますが グローバル連想配列に格納できません。 success: function()内でさらに関数を定義もして見ましたが反応せず。。。 (プルダウンメニューを変更したら実行する関数) 以下ソースになります。 ----------------------------------------------------------- $(function() { objectarray = new Object(); $.ajax({ type: 'GET', url: 'hoge.html', dataType: 'html', success: function(data) { var text = [];   $(data).each(function(i){ text = $(this).text().split("\n"); }); var alldata = $.grep(text, function(e){return e;});//空白やデータなしを削除 for(i=0; i<alldata.length; i++){ objectarray[i] = (alldata[i]); alert("forの中" + objectarray[i]);//取得できた } alert("forの外" + objectarray);//取得できた return objectarray;//あってもなくても変わらない。。。 }, error:function() { alert('問題がありました。htmlデータがありませんでした。'); }             //return objectarray;←有効にするとjsが認識されなくなります。 }); alert("ajaxの外" + objectarray[0]);//何も表示されない、firebugでみるとobjectarrayには値が入っている。 }); ----------------------------------------------------------- 上記はnew Object()でやっておりますがnew Array()でも同じ結果でした。 回避策をご教授いただけましたら幸いです。 どうぞよろしくお願いいたします。

  • 多次元配列とfor文について

    javascriptの配列について質問です。 例えば: var arrXXX = new Array(); function samplefunc{ //3次元配列の種類の作成 for (m = 0; m < aaa.length ; m++) { //連想配列作成 arrXXX .push(aaa[m]); } for (j = 0; j < bbb.length; j++) { for (i = 0; i < ccc.length; i++) { arrXXX[aaa[j]] = new Array(ccc.length); arrXXX[aaa[j]][i] = new Array(ccc.length); for (k = 0; k < ddd.length; k++) { arrXXX[aaa[j]][i][k] = eee;     ここでは配列を適切に使える・・・ } } } ここでarrXXXを使いたいが、3次元配列でなくなっている?!  arrXXX[~][0][0]はnullまたはオブジェクトではありません・・・がでます。 } 結局、for文を完全にでてしまうと、せっかくつくった配列がダメになってしまいます。どうすればfor文外で配列を使用できるのか教えてください!

  • for文内での関数の使用がうまくいきません。

    いつもお世話になってます。flash初心者です。 環境:flash 2004 MX, WIN XP ボタンが3つ、それぞれ a0, a1, a2~ a(n個)という名前で存在します。このボタンを押したときに変数の値を代入するためのスクリプトを作りました。 文が長くて、for文を使って、繰り返しの処理を省略したいのですが、for文内で、変数に 配列の値を代入することに失敗してしまいます。 まず、ダイナミックテキストの変数名を myhoge にする。 //各ボタン用のテキストを定義 var hoge = new Array(); hoge[0] = "0番のボタンを押したときのテキスト"; hoge[1] = "1番のボタンを押したときのテキスト"; hoge[2] = "2番のボタンを押したときのテキスト"; ↓ hoge[99] = "99番のボタンを押したときのテキスト"; for (var i:Number = 0; i <= 99; i++) { _root["a"+i].onRelease = function() { _root.myhoge = _root.hoge[i]; } } 上記で、該当ボタンをクリックしたときは、ボタンは反応するのですが、配列のところがうまくいってないみたいです。 原因がわかる方いらっしゃいましたらお願いいたします。

  • C#の配列について

    string[] hoge = { "0-9", "a-z", "あ-ん" }; for (int i = 0; i < hoge.Length; i++) Console.WriteLine(hoge[i]); 出力 0123456789abcde...xyzあいうえお...わおん このように配列を宣言することはできませんか? 1文字ずつ string[] hoge = { "0", "1", ..."a", "b" ..."あ", "い", ... }}; と書くのはソースが汚くなってしまう気がして…

  • 配列を後ろから数えるには?

    例えば配列を前からならこのようになるはずです class TestIntArray { public static void main(String args[]) { int vi[] = {0, 1, 2, 3, 4, 5, 6}; for (int i = 0; i < vi.length; i++) System.out.println("vi[" + i + "] = " + vi[i]); } ですが逆に配列を後ろからならどうしたらいいのでしょうか? 今回の場合は6543210を出力させるのが目的です 今までずっと配列って言ったら for (int i = 0; i < vi.length; i++)がほぼ定形分ように頭にはいっていますので考え方がわからないです。 ヒントやアドレスをお願いします。

    • ベストアンサー
    • Java
  • 配列の中身を全て順番に別の関数へ引数として渡すには

    配列の中身を全て順番に別の関数へ引数として渡すには、どうすればよいでしょうか? このままだと、'null' は Null またはオブジェクトではありません。 となります。 function piyo(hoge){ alert(hoge); } for (var i = 0; i < hogearray.length; i ++) { piyo(hogearray[i]);//ここを通ったら、順番の関数を呼び出すようにしたい } また、グローバル変数として渡すには、どうすればよいでしょうか?