配列

生成

Array コンストラクタを利用する方法。引数に配列のサイズを指定できるけど,必要なら勝手に大きくなってくれる。

var a1 = new Array();
a1[0] = "dog";
a1[1] = "cat";
a1[2] = "elephant";

コンストラクタに値を直接渡す方法。

var a2 = new Array("dog", "cat", "elephant");

リテラル。

var a3 = ["dog", "cat", "elephant"];

要素の型は何でも良い。

var a4 = ["Andy", 16, new Date()];

配列の長さ

長さを得るには length プロパティ。必要なら自動的に長くなる。

var a = new Array("andy", "bill", "charlie");
document.write(a.length, "<br>");      // => 3

a[4] = "eddy";
document.write(a.length, "<br>");      // => 5

document.write(a[3], "<br>");      // => undefined

↑a[3] は代入されてないので,undefind になる。

sort

sort() メソッドに引数には,比較関数を渡す。単純に大小関係で比較するなら省略していい。

var a = [4,2,1,5,6,3];
a.sort();
for (i=0; i<a.length; i++) {
    document.write(a[i], ",");      // => 1,2,3,4,5,6,
}

比較関数は,2引数 a,b をとって 正の値/0/負の値 のいずれかを返すように作る。

a > b正の値
a == b0
a < b負の値

連想配列

Array の添字に整数(インデックス)じゃなくて文字列(キー)を使うと連想配列になる。

var pets = new Array();

pets["Andy"] = "dog";
pets["Bill"] = "cat";
pets["Charlie"] = "elephant";

for (name i pets) {
    document.write(name, ": ", pets[name], "<br>");
}

こりゃ気持ち悪い。整数の添字と混ぜるとどうなるんだ?

var pets = new Array();

pets["Andy"] = "dog";
pets[1] = "cat";

for (name in pets) {
    document.write(name, ": ", pets[name], "<br>");
}

なんでもないかのように動く。
というか,pets[1](添字が整数)と pets[“1”](添字が文字列)を区別していないような感じ。

var pets3 = new Array();

pets3[1] = "dog";      // 整数で代入
document.write(pets3[1], "<br>");      // 整数で参照 => "dog"

pets3["1"] = "cat";      // 文字列で代入
document.write(pets3[1], "<br>");      // 整数で参照 => "cat"

やっぱり。

オブジェクト

  • JavaScript のオブジェクトは Ruby でいうクラス
  • インスタンスの生成
today = new Data();      // new コンストラクタ;
  • メソッド呼び出し
today.getDay();      // インスタンス名.メソッド名();
  • インスタンスメソッドとクラスメソッドがある。
  • インスタンス名.プロパティ名 でプロパティ参照
  • インスタンス名.プロパティ名 = 値; でプロパティを設定
  • 同じインスタンスに続けてアクセスするには with 文
with(document) {
    write("<h1>Hello!</h1>");
    write("This is JavaScript.");
}

変数

  • 宣言しなくても使えるけど,明示的に宣言するには:
var v1;
var v2, v3, v4;
var v5 = 10;      // 同時に初期化
  • 数値型,文字列型,ブーリアン型,オブジェクト型 etc.
  • リファレンス型とプリミティブ型
  • 変数名は,アルファベットか _ で始まり,2文字目以降には数字も使える。
  • 予約語は使えない。