JavaScriptメモ帳、その1

By , 2009年8月24日

JavaScriptの基礎について、管理人の考えたことや思ったことなどのスクリプトを書いていく上で思ったことの、ちょっとしたメモです。行き詰まったときなどに見ると、解決が早まるかもしれません。

それでは、詳細は続きから

for (variable in array) statements
は、for (i in navigator) {
document.write(i, “
“);
}
調べられない属性(DontEnum属性を持つ属性)以外のオブジェクトの持つ属性はi(カウント変数)の配列にて表示される。即ち、(i in navigator)のiとは配列の持つ変数のことで、JavaScriptでは、オブジェクトの持つ各属性は配列で管理されていると考えられる。

0ならnavigator.appCodeName
1ならnavigator.appName
2ならnavigator.appVersion(以下略
navigator.language
navigator.mimeTypes
navigator.platform
navigator.oscpu
navigator.vendor
navigator.vendorSub
navigator.product
navigator.productSub
navigator.plugins
navigator.securityPolicy
navigator.userAgent
navigator.cookieEnabled
navigator.onLine
navigator.buildID
navigator.javaEnabled
navigator.taintEnabled
navigator.preference
navigator.geolocation
navigator.registerContentHandler
navigator.registerProtocolHandler
navigator.mozIsLocallyAvailable

この場合、全てのオブジェクトを動作させて、調べるコードは
   <script language=”JavaScript”>
   <!–
         //ブラウザ情報を順番に全て出力
   for(i in navigator){
      value = navigator[key];
      document.write(“<tr><td>”,i,”</td><td>”,value,”</td></tr>”);
   }
   //–>
   </script>

というようになります。<table>のHTML文に関しては見やすくするために使います。keyは配列の代入された数であり、実際にはカウント変数でよく使われるiでもOKです。この場合document.writeのiの部分には、navigatorオブジェクトのプロパティが表示され、代入されたvalueの値には、プロパティの値が書き込まれます。

なお、数値とHTMLタグの連結は+でも,(コンマ)でもよい。

break label

abc:
for(ループ文);

という感じにループ文の外側に設置しておけば、if(i>5)break abc;というように任意のbreakを設置した位置で、抜けることが出来る。(この場合は、iが5より大きくなった場合にループを抜ける

動作の流れ(変数を表示させてわかりやすくしています)
abc:
for (i = 0; i < 10; i++) {
document.write(i+”(i)
“);
for (j = 0; j < 10; j++) {
document.write(j+”(j)
“);
xx = i * 10 + j;
if (xx > 20) {
break abc;
}
document.write(xx + “(xx)
“);
}
}

iは0、jも0、元式:i * 10 + j
xx=0×10+0=0 ifは20以上なので偽、document.writeで現在のxxの数値を出力、
ループ構文:内側のfor(j)文から計算されていく
xx=0×10+1=1 同じくifは偽 以下、ループ


0; j(10) < 10となったとき、内側のループを一旦抜け、外側のループへiに1が代入され、もう一度内側のループへ・・・


同じく0; j(10)<10となったとき、内側のループを抜け、外側のループに今度は2が代入され、もう一度ループへ・・・


xx=0×10+21=21、このときifは21(xx)>20となり、左の数が右の値を上回り、真となる、break abc;の構文が実行されループから抜ける(>)は未満(小さい)を意味する、(>=)のように(以上、以下)同じ数を含まない。

出力結果:0~20の数字が改行されて出力される。
0(i)
0(j)
0(xx)
1(j)
1(xx)
2(j)
2(xx)
3(j)
3(xx)
4(j)
4(xx)
5(j)
5(xx)
6(j)
6(xx)
7(j)
7(xx)
8(j)
8(xx)
9(j)
9(xx)
1(i)
0(j)
10(xx)
1(j)
11(xx)
2(j)
12(xx)
3(j)
13(xx)
4(j)
14(xx)
5(j)
15(xx)
6(j)
16(xx)
7(j)
17(xx)
8(j)
18(xx)
9(j)
19(xx)
2(i)
0(j)
20(xx)
1(j)

continue(継続)

label を指定した場合は、ラベルで指定したループの次のループを実行します。JavaScript 1.2 以降で使用可能です。

abc:
for(i=0;i<7;i++){
document.write(i+”(i)
“);
for(j=0;j<10;j++){
document.write(j+”(j)
“);
xx=i*10+j;
if(xx==35){
continue abc;
}
document.write(xx+”(xx)
“);
}
}

xx(35)==35時に、continue abc;が実行され、j(5)だったのが、スキップされ、iは6になり、次のループではj(5)の処理はスキップされたので、j(0)から始まるようになる。結果

if(xx==35){
continue abc;
}
↑の実行の後のxxの値はj(6~9)の五つの値の処理がスキップされ、60から始まるようになる。

出力内容:1~34まで出力され、その後40~69まで出力される。
0(i)
0(j)
0(xx)
1(j)
1(xx)
2(j)
2(xx)
3(j)
3(xx)
4(j)
4(xx)
5(j)
5(xx)
6(j)
6(xx)
7(j)
7(xx)
8(j)
8(xx)
9(j)
9(xx)
1(i)
0(j)
10(xx)
1(j)
11(xx)
2(j)
12(xx)
3(j)
13(xx)
4(j)
14(xx)
5(j)
15(xx)
6(j)
16(xx)
7(j)
17(xx)
8(j)
18(xx)
9(j)
19(xx)
2(i)
0(j)
20(xx)
1(j)
21(xx)
2(j)
22(xx)
3(j)
23(xx)
4(j)
24(xx)
5(j)
25(xx)
6(j)
26(xx)
7(j)
27(xx)
8(j)
28(xx)
9(j)
29(xx)
3(i)
0(j)
30(xx)
1(j)
31(xx)
2(j)
32(xx)
3(j)
33(xx)
4(j)
34(xx)
5(j)
4(i)
0(j)
40(xx)
1(j)
41(xx)
2(j)
42(xx)
3(j)
43(xx)
4(j)
44(xx)
5(j)
45(xx)
6(j)
46(xx)
7(j)
47(xx)
8(j)
48(xx)
9(j)
49(xx)
5(i)
0(j)
50(xx)
1(j)
51(xx)
2(j)
52(xx)
3(j)
53(xx)
4(j)
54(xx)
5(j)
55(xx)
6(j)
56(xx)
7(j)
57(xx)
8(j)
58(xx)
9(j)
59(xx)
6(i)
0(j)
60(xx)
1(j)
61(xx)
2(j)
62(xx)
3(j)
63(xx)
4(j)
64(xx)
5(j)
65(xx)
6(j)
66(xx)
7(j)
67(xx)
8(j)
68(xx)
9(j)
69(xx)

代入演算子

JavaScriptでは、変数に対する代入は、数値と”ABCD”などの文字列をC言語のようにint型やchar型のように、型の制約に殆ど関係なく代入することが出来る。

演算子+の場合は文字+数値の場合などは、算術演算子ではなく、文字列を連結する、連結演算子として機能するので、注意が必要。なお、フォームから入力した場合は、値は文字列として扱われる、フォームの値を数値として扱う場合は-0を減算する。

<script type=”text/javascript”>
<!–
function func(){
    alert(“文字連結:”+document.F1.T1.value+5);//文字連結として機能
    alert((document.F1.T1.value-0)+5);//算術として機能
}
–>
</script>
<form name=”F1″ action=”#”>
<input type=”text” name=”T1″>
<input type=”button” value=”OK” onclick=”func()”>
</form>

実行結果:

ただし、0減算にて、算術として機能させる場合は、文字列の挿入は叶わないとされる。

比較演算の演算子> < >= <=に対し、文字列を使用した場合は、辞書順の比較を行う。
<script type=”text/javascript”>
<!–
xx=”D”
if(xx<”H”){
    alert(“xxはHよりも前にあります”);
}
</script>

なお、JavaScriptでは、大文字と小文字を区別するため、上記にxxに小文字のdを指定した場合は、Hの後に小文字のdが存在することになり、if文は実行されない、また、逆においても同様とする。

ひらがなの場合も実行されず、実行されるのは小文字と特殊記号のみであると判明、JavaScript内部の文字列判別には数値である、ある種の文字コードを用していると思われる。

辞書順で言うと、前の方から示すと、「特殊記号」→「アルファベットの大文字」→「アルファベット小文字」→「ひらがな」とされる。(変わる場合もあり、数値の場合は文字コードの変化により、特定はしないものとする)


コチラもあわせてどうぞ!
  1. JavaScript用エディタ「JavaScriptist」
  2. JavaScriptメモ帳、その2
  3. サイトにプログラムコードを貼り付けるpreタグのCSS
  4. JavaScriptデバッグ中のエラーの種類について
  5. 高機能なJavaScriptエディタ「Overbyte」

Leave a Reply


OfficeFolders theme by Themocracy