##Javaにおける配列の長さ
public class Test01 {
public static void main(String[] args) {
String[] list=new String[3];
list[0]="Emma";
list[1]="Olivia";
list[2]="Emily";
for (int i = 0; i < list.length; i+=1) {
System.out.println ("list[" + i + "]=" + list[i]);
}
System.out.println ("配列の長さ:" + list.length);
}
}
###コンパイルと実行結果
c:\2015>javac Test01.java
c:\2015>java Test01
list[0]=Emma
list[1]=Olivia
list[2]=Emily
配列の長さ:3
##Javascriptにおける配列の長さ
var list=[];
list[0]="Emma";
list[1]="Olivia";
list[2]="Emily";
for (var i = 0; i < list.length; i+=1) {
console.log("list[" + i + "]=" + list[i]);
}
console.log("配列の長さ:" + list.length);
/*
実行結果
"list[0]=Emma"
"list[1]=Olivia"
"list[2]=Emily"
"配列の長さ:3"
*/
###★__注意:配列の長さは配列に存在するプロパティの数と一致するとは限らない__
Javascriptの配列は先頭の値から順に「0」、「1」・・・と連続した数値のプロパティ名を持つ。
配列のサイズが大きくなる
現在のlength値と同じか、それよりも大きい値を添え字とした要素にデータを格納すると、lengthプロパティは新しい要素を含むサイズにまで自動的に大きくなる。配列の境界エラーが発生することはない。
現在のlengthプロパティは新しい要素を含むサイズにまで自動的に大きくなる。
lengthプロパティは配列の、最も大きな整数値を持つプロパティのプロパティ名に1を加えた値になる。それは、必ずしも配列に存在するプロパティの数と一致するとは限らない。(Douglas Crockford 著 水野貴明 訳『JavaScript:The Good Parts』(オライリー・ジャパン発行、2008) p68)
「最も大きな整数値を持つプロパティ」は最も大きいインデックスを持つ要素のことを言ってるのだろう。
下記コードにおいて、配列listはプロパティの数は4つであるが、配列listに存在するプロパティにおいて、最も大きい数値のプロパティ名は7でありlist.lengthの値は8になる。
var list=[];
list[0]="Emma";
list[1]="Olivia";
list[2]="Emily";
list[7]="Charlotte";
for (var i = 0; i < list.length; i+=1) {
console.log("list[" + i + "]=" + list[i]);
}
console.log("配列の長さ:" + list.length);
/*
実行結果
"list[0]=Emma"
"list[1]=Olivia"
"list[2]=Emily"
"list[3]=undefined"
"list[4]=undefined"
"list[5]=undefined"
"list[6]=undefined"
"list[7]=Charlotte"
"配列の長さ:8"
*/
プロパティがなく配列のサイズが0でない例
配列要素の数をあらかじめ決めておくことができる。この時、プロパティがないが配列のサイズが0になならない。
var list=new Array(5);
console.log("配列の長さ:" + list.length);
/*
実行結果
配列の長さ:5
*/
##環境
ベアボーン:Shuttle XS35GS V3
OS:win7(32bit)
JAVA SE8(jdk-8u45-windows-i586)
##解説
プログラミング言語の勉強してると、「JavaとJavascriptってどう違うか?」って考えたり、人に聞かれたりすることがある。私はプログラミング言語を全く知らない人には「プログラミング言語を食べ物に例えると、JavaとJavascriptはメロンとメロンパンくらい違います。つまり、両方ともプログラミング言語ですが、果物とパンくらい違います」って言いますが、「プログラマーとして技術的にどう違うかを詳細に説明しろ」って言われてたら説明できません。違いを理解をするため、いろんな観点でJavaとJavascriptを比較していこうと思います。
今回はJavaとJavascriptでの配列の長さを比較します。
JavaとJavascriptの両方で配列の長さはlengthを使えば分かる。Javaの配列はオブジェクトなのでフィールドを保持している。Javaは「length」フィールドを使う。Javascriptの配列は実際にはオブジェクトであるがArray.prototypeを継承しており「legnth」プロパティが使える。Javascriptで配列の長さは配列に存在するプロパティの数と一致するとは限らないことに注意する。
###まとめ
JavaとJavascriptの両方で配列の長さはlengthを使う。
Javascriptで配列の長さは配列に存在するプロパティの数と一致するとは限らないことに注意する。
##参考文献
Douglas Crockford 著 水野貴明 訳『JavaScript:The Good Parts』(オライリー・ジャパン発行、2008) p68
##関連
[JavaとJavascriptと円周率 - Qiita][1]
[1]:http://qiita.com/kyoshiro-obj/items/a5bea7174f6e90983cc3