Ext JSやRapid Driveなど
システム開発の技術情報をご紹介。

お問い合わせ 資料請求 無料見積り

お電話でお気軽にお問い合わせくださいTel 03-6805-2904 営業時間 [平日]AM 9:30 - PM 6:30

モダンJavaScript

モダンJavaScriptについて

例外処理

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オブジェクト

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になります。