JavaScript は他のスクリプトと同様に
値はそのとき要求される型に変換されます。例えば、
a = 1; //数値型
b = "" + a; //文字列と結合するため文字列型に
//( 演算子 + は文字列の結合 )
a は文字列と結合する前に文字列に変換されます。
このように演算子 + を使うと簡単に変わりますが、
その規則はだいたい次のようなものです。
文字列型とその他とでは文字列型になる。
ブーリアン型が文字列になるときは "true" or "false" になる。
数値型とブーリアン型とでは数値型になる。
ブーリアン型が数値型になるときは、 true → 1 false → 0 。
この辺のことを調べた JavaScript が
ここにあります。
試してみてください。
Netscape Navigator と Internet Explorer では若干動作が異なります。
上と逆に文字列を数値にするには、
a = "1"; //文字列型
a = a - 0; //引き算をするため文字列型を数値型に
a = a * 1; //掛け算でもいいが遅い、たぶん
で、 a = 1 と文字列型から数値型になります。
例を挙げてみましょう。
a = "1E+2" - 0; //100
a = "0xFF" - 0; //255
a = "11 11" - 0; //NaN
a = "11a" - 0; //NaN
a = "true" - 0; //NaN
実は、文字列を数値型にするには、
parseInt 、
parseFloat という関数が用意されています。
こちらの方がもう少し柔軟に数値に変換してくれます。
少し遅いですが。
a = parseInt("11 11"); //11
a = parseInt("11a"); //11
a = parseInt("true"); //NaN
a = parseInt("v11a"); //NaN
if や三項演算子などのブール値が要求される場面では、
ブーリアン型に変換されるものと思われます。
var a, b;
a = 1 ? true : false; //true
a = 0 ? true : false; //false
a = 0.1 ? true : false; //0以外ならtrue
a = "" ? true : false; //長さ0の文字列はfalse
a = "0" ? true : false; //長さ1の文字列はtrue
a = b ? true : false; //undefinedはfalseに変換
a = null ? true : false; //nullも同じ
a = NaN ? true : false; //NaNも
//text1が定義されていればtrue、されていなければfalse
a = document.form1.text1 ? true : false;
変数は、
var というキーワードを付けて宣言します。
var i; //宣言
var j, n; //まとめて宣言
var a = 1; //ついでに代入
変数は宣言しただけでは値はなく
undefined
となってしまいます。
変数は値を代入してから使わなければなりません。
変数は宣言する場所によって、記憶域が決まります。
すなわち、関数オブジェクトの内側で宣言すればローカル、
外側で宣言すればグローバルとなります。
ブロックの中で宣言してもその関数オブジェクトの中で使えます。
function test() {
var i;
for(i = 0; i < 2; i++) {
var a;
a = i;
}
if(!a) //undefinedなら
alert("a は未定義です");
else //でも本当はこちら
alert("a = " + a);
}
for の初期化部分でも宣言できますが、ブロックの外側でも使えてしまいます。
for(var i = 0; i < 4; i++)
...
alert(i); //4
関数オブジェクトの内側の関数オブジェクトで変数が宣言されていれば、
内側の関数オブジェクト内が記憶域です。
function kappa() {
this.cry = function() {
var a = "いたいケロ";
alert(a);
}
this.cry2 = function() {
alert(a); //aは宣言されていない
}
}
var c = new kappa(); //カッパオブジェクト
c.cry(); //いたいケロ
c.cry2(); //エラー
実は、宣言しなくても変数は使えて、その場合グローバルになるのですが、
なるべくならきちっと宣言するようにしましょう。
他のウィンドウの変数はそのウィンドウが参照できれば参照できます。
window.variable
例は次のようです。
var w;
function test5() {
if(!w) //ウィンドウが開いていない場合
w = window.open("js202_1.htm");
else //ウィンドウが開いている場合
alert(w.a);
}
ボタンを押すとウィンドウが開きます。
次にボタンを押すとそのウィンドウの a という変数の値が表示されます。
その開かれるウィンドウのコードは次のようです。
var a = 0;
function increment() {
a++;
}
このウィンドウにはボタンがついており、
そのボタンを押すと押すと変数 a の値が1増します。
これを何回か押した後、元のウィンドウのボタンを押してみましょう。
ウィンドウを参照できない場合は
Cookie を使いましょう。
var isopen = false;
function test6() {
if(!isopen) { //ウィンドウが開いていない場合
window.open("js202_2.htm");
isopen = true;
}
else //ウィンドウが開いている場合
alert(getCookie("a"));
}
function getCookie(item) {
//以下略
開かれるウィンドウのコードは次のようです。
var a = 0;
document.cookie = "a=" + a;
function increment() {
a++;
document.cookie = "a=" + a;
}