S-JIS[2004-01-10/2006-07-03] 変更履歴
JavaScriptで使用できる変数について。
var var_name; var var1,var2; var var3 = "初期値";
v1 = 1; //いきなり左辺値として使うとグローバル変数 v2 = v1 * 2; //OK v2 = v3; //いきなり右辺値として使うと「'v3'は宣言されていません。」というエラー
var var1,Var1; //別物
var v;
v = "moji"; //文字列を入れれば文字列の変数
v = 1; //数値を入れれば数値の変数(途中で別の物に変わってもOK)
変数のスコープは、ローカルとグローバルの2種類しかないようだ。(ローカルスコープのネストが出来ない)
function putTest(msg){ var z1='<', z2='>'; //ブロックの外の変数宣言では不等号の括弧 if(true){ var z1,z2; //ブロック内の変数宣言では丸括弧 z1='('; z2=')'; } confirm(z1 + msg + z2); }
ブロック内で同じ変数名を宣言しても、ブロック内のみの独立した変数にはならない。(エラーにもならないけど)
for文の中で変数宣言をすることも出来る。これは、ローカル変数と同じ扱いになる。
function test(){ for(var i=0; i<2; i++){ confirm(i); } }
var arr; //普通の変数と同じ arr = new Array(10); ←個数10の配列(0〜9)。Array(0)も可。 arr = new Array("abc", "def", "ghi"); ←初期値を割り当てる方法 arr = ["abc", "def", "ghi"]; ←初期値を割り当てる別の方法
confirm(arr.length);
for(var i=0; i<arr.length; i++){ arr[i] = new Test(i); }
JavaScriptでは、連想配列(マップ)が使える。[2006-07-02]
var map = new Object(); map["hoge"] = "zzz"; map["hage"] = "余計なお世話";
var map = { hoge:"zzz", hage:"余計なお世話" } …連想配列の初期化構文。応用するとちょっとしたクラスもどきが作れる
confirm(map["hage"]);
confirm(map.hage); …オブジェクトに対するメンバー(フィールド)も、連想配列で実装されている
var str = "";
for(var i in map){ …マップ内の全ての要素に対してループ
str += i + ":" + map[i] + "\n";
}
confirm(str);
delete map["hage"]; //削除!排除!抹消!
JavaScriptの配列は、連想配列(マップ)としてObjectに実装されている。
つまり、Arrayを使わなくても使える。(ただし配列の個数が扱えるなど、Arrayの方が便利)
var arr = new Object(); for(var i=0; i<10; i++){ arr[i] = i + 1; }
confirm(arr[3]); confirm(arr["3"]); //confirm(arr["03"]; …キー03は定義されていないからエラー //confirm(arr.3); …さすがに数字では無理
eval()という関数は、文字列をJavaScriptの式として実行する。[2004-06-11]
これを利用すると、変数名を動的に変えたように扱うことが出来る。
function putFruitColor(fruit){ var colorApple ="赤"; var colorBanana="黄"; var colorOrange="橙"; if(fruit=="") return; var col=eval("color" + fruit); alert(col); }