例外処理
tryキーワードを使うことで、エラーを起こすかもしれないコードを、エラーが発生してもブラウザには通知せずに実行することができます。
try {
// 処理
}
catch (e) {
// 例外オブジェクトeが渡されます。
}
throwキーワードを使用して、カスタムエラーをブラウザに通知することができます。
try {
// 処理
}
catch (e) {
throw new Error(’カスタムエラー!’);
}
JavaやC#、PHPなどの例外を備える言語と同じように例外処理が行えます。
数値型、論理型(boolean)、null、undefinedに関しては、固定サイズのメモリ領域が確保されます。反対に、オブジェクト、配列、関数、クラスは、実行時に動的に割り当てられるメモリ領域のポインタになります。
つまり、配列を例にすると、定義したときの変数は、実際の配列値へのポインタであるといえます。
JavaScriptが実装している日付型は、他の言語の日付型に比べて制限があります。
Ext JSは、Dateオブジェクトのコンストラクタを拡張して、PHPの日付型相当の機能を提供しています。
詳しくは、API Documentationを参照してください。
JavaScriptは、ColdFusionやPHPと同様に非タイプ型の言語です。
つまり、型宣言をしません。
実行時に、変数に関するデータ型を適時変更します。
変数は、使用する前にvar使って宣言しなければなりません。
varをつけないで変数を割り当てると、グローバルな名前空間に作成されます。
さらに、その変数に値を割り当てないで読もうとすると、エラーになります。
varで宣言した変数後、どこに作られるかという話です。先ほどの宣言で、グローバルな名前空間に作成されるというのは、windowオブジェクト下に作成されることを指します。
var scope = “グローバル”;
function checkscope() {
var scope = “ローカル”;
alert( scope );
alert( this.scope );
}
checkscope();
alert( scope );
alert( window.scope );
checkscope関数内で宣言されたscope変数は、”ローカル”という文字列が格納されています。なので、alertの引数に設定した、 scope変数は”ローカル”という文字列が格納されているため、画面に”ローカル”と表示されますが、this.scopeとした場合、”グローバル” と表示されます。これは、checkscope関数が実行されたときのスコープがグローバルスコープになっているためです。
先ほどから、グローバルな名前空間とか、windowオブジェクトとか出てきていますが、JavaScriptインタプリタが起動するたびにグローバルなオブジェクトが作成されます。ブラウザでは、グローバルなオブジェクトは”window”の名前を持っています。すべてのオブジェクトは、この windowオブジェクトの下に生成されます。
JavaScriptは、ブロックスコープがありません。そのため、ループ内で宣言された変数はローカル変数ではありません。
var len = 5;
for (var i=0; i<=len; i++) {
// 処理
}
alert(i);
alert(window.i);
JavaScriptはJavaとC#と同様に、不必要なメモリを解放することが出来ます。この処理は「ガベージコレクション」と呼ばれます。
オブジェクトが不要なときにJavaScriptインタプリタによって自動的に削除されます。正常に削除されない現象をメモリリークといいます。主に、このメモリリークはIEでのみ発生します。
thisは、現在のスコープを表すオブジェクトです。通常、windowオブジェクトが設定されます。
var bar = ‘test’;
function foo() {
alert(this.bar);
}
foo();
関数の呼び出し時に、実行スコープを変更することができます。未指定の場合は、上記のようにwindowオブジェクトが指定されます。スコープを指定するためには、callを使います。
var bar = ‘test’;
var o = {
piyo: ‘test2′
}
function foo() {
alert(this.bar);
alert(this.piyo);
}
foo.call( o );
スコープは、oオブジェクトになるため、this.barはundefinedになります。