JavaScript

関数

function add (arg1, arg2) { var result = arg1 + arg2; return result; } add(2, 5); // => 7

変数のスコープ

変数を定義するときには,とにかく var をつけておくのが良さそうだ。 関数の外で定義した変数はグローバル 関数の中で var を使って定義した変数はその関数内のローカル 関数の中で var を使わずに定義した変数はグローバル 関数の中で var を使った場合: …

arguments

関数定義に仮引数を書かなくても,arguments という配列に格納される。引数の数が不定の場合に便利。 function hello() { for (var i=0; i<arguments.length; i++){ document.write("Hello, ", arguments[i], ".<br>"); } return i; } hello("Andy", "Bill", "Charlie");</arguments.length;>

再帰呼び出し

function fact(n) { if (n < 0) return null; if (n > 0) { return (n * fact(n-1)); } else { return 1; } }

無名関数

名前を指定しないで関数を定義すると無名関数になる。変数に代入する場合: var f1 = function(arg1, arg2) { return arg1 * arg2; } f1(3,2); // => 6 直接使う場合: var a = new Array(3, 2, -6, 8, -4); a.sort(function (a,b) {return a - b;}); docume…

if

var val1 = 5; var val2 = 4; if (val1 < val2) result = val2; else result = val1; document.write(result); 実行するステートメントが複数なら { } で囲む。 条件演算子もある。 val1 < val2 ? val2 : val1;

for

var sum = 0; var i; for (i=1; i<=10; i++) { sum += 1; } document.write(sum, "<br>");

for 〜 in

var animals = Array("dog", "cat", "elephant"); // 配列 for (x in animals) { document.write(x, "<br>"); }

while

var i = 0; while (i < 10) { document.write(i++, "<br>"); } ループの停止は break,中断(スキップ)は continue。 var i = 0; while (true) { i++; if (i % 2 == 0) continue; if (i >= 10) break; document.write(i++, "<br>"); }

try 〜 catch

例外処理。 try { var today = Date(); today.set_month(3); // no such method. } catch (e) { document.write(e); // => [object Error] } 例外を発生させるには throw かな。

配列

生成 Array コンストラクタを利用する方法。引数に配列のサイズを指定できるけど,必要なら勝手に大きくなってくれる。 var a1 = new Array(); a1[0] = "dog"; a1[1] = "cat"; a1[2] = "elephant"; コンストラクタに値を直接渡す方法。 var a2 = new Array("…

連想配列

Array の添字に整数(インデックス)じゃなくて文字列(キー)を使うと連想配列になる。 var pets = new Array(); pets["Andy"] = "dog"; pets["Bill"] = "cat"; pets["Charlie"] = "elephant"; for (name in pets) { document.write(name, ": ", pets[name]…

オブジェクト

JavaScript のオブジェクトは Ruby でいうクラス インスタンスの生成 today = new Data(); // new コンストラクタ; メソッド呼び出し today.getDay(); // インスタンス名.メソッド名(); インスタンスメソッドとクラスメソッドがある。 インスタンス名.プロパ…

変数

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

リテラル

整数(10進数,8進数,16進数) 10 // 10進数 012 // 8進数 0x0a // 16進数 浮動小数点 3.14 1.3e3 .3 文字列 "abc" 'def' ブーリアン true false null エスケープシーケンス

予約語

break else new var case finally return void chatch for switch while continue function this with default if throw delete in try do instanceof tpeof 将来のために予約されている語もある: abstract enum int short boolean export interface static…

演算子

当たり前のものは省略。 インクリメント(++)/デクリメント(--)。前置と後置。 論理演算子: !/&&/||。not/and/or はない。 ビット演算子: &(論理積)/|(論理和)/^(排他的論理和) シフト演算子: >(右算術シフト)/>>>(右論理シフト)。…

'===' と '=='

'===' は型も含めて同一でなければ true にならない。 '==' は型が違っても構わない。たとえば,数値の 10 と文字列の "10" が true になる。 var n = 10; var s = "10"; with(document) { write("n = ", n, " ; type: ", typeof n, "<br>") write("s = ", s, " …

故あって JavaScript に手を出す

基本事項。 大文字と小文字を区別 ステートメントの終わりにはセミコロン; // 行末までコメント /* 複数行のコメント */ スクリプトは script タグで囲む。 JavaScript を認識できないブラウザのために, で囲む(HTMLのコメント扱い)。 <script language="javascript" type="text/javascript"> …