オブジェクトの作成とそのプロパティの作成には複数の方法が存在し、次の6つのコードは同一の結果を得ます。
| コード | 説明 | プロパティ名 の指定方法 |
|---|---|---|
var obj = new Object(); obj.foo = 'bar'; |
Objectインスタンスを作成し、未定義のプロパティを定義。 | 識別子 |
var obj = new Object(); obj[ 'foo' ] = 'bar'; |
連想配列でプロパティを作成。 | 文字列 |
var obj = Object(); obj.foo = 'bar'; |
new演算子を省略し、Objectインスタンスを作成。 | 識別子 |
var obj = { foo:'bar' };
|
オブジェクトリテラルとして、プロパティを初期化して作成。 | 識別子 |
var obj = { 'foo':'bar' };
|
プロパティ名を文字列で指定。 | 文字列 |
var obj = {};
obj.foo = 'bar';
|
オブジェクトリテラルとして、プロパティを設定せず作成。 | 識別子 |
オブジェクトのプロパティへは配列演算子 ([ ]) を用いてアクセスできるため、これを利用すれば連想配列としてプロパティを使用できます。例えば次の2つは、同一のプロパティを示します。
image.width
image[ 'width' ]
プロパティ名を文字列で指定できるため、これを活用することでアクセスするプロパティを動的に変更することも可能です。また、プロパティ名に使用できない文字が使えるようになります。例えばobj.@は不可ですが、obj[ '@' ]は可能です。
詳細は配列のページで解説しています。
オブジェクトの生成時に、プロパティを初期化できます。
オブジェクト初期化子の使用法 - MDC
{ プロパティ名:値, プロパティ名:値, ... }
最後のプロパティの後にカンマ (,) を付けると、IE6とIE7では「識別子、文字列または数がありません。」としてエラーとなる。IE8やFirefoxでは問題ない。
次の2つのコードは同じ結果となります。
var point = new Object(); point.x = 1.0; point.y = 2.0;
var point = { x:1.0, y:2.0 };
あるオブジェクトのインスタンスに対してfor( in )でループ処理することで、そのオブジェクトで定義されているプロパティを一覧できます。またそのプロパティ名をキーとすることで、そのインスタンスにおけるプロパティの値も取得できます。
なお組み込みプロパティの多くは、この方法では取得できません。また取得する順序を指定することはできません。
function ShowProperties( object )
{
var text = '';
for( var propertyName in object )
{
var propertyValue = object[ propertyName ];
text += [ propertyName, ' : ', propertyValue, '\n' ].join( '' );
}
window.alert( text );
}
例えば上記の関数に対してwindow.screenを引数にして呼び出すと、次のような結果を取得できます。
top : 120 height : 768 width : 1024 left : -1024 pixelDepth : 24 colorDepth : 24 availWidth : 1024 availHeight : 768 availLeft : -1024 availTop : 120
nullとは、オブジェクトがないことを表すオブジェクト型の値です。
| 用途 | 変換後の値 |
|---|---|
| 論理コンテキスト | false |
| 数値コンテキスト | 0 |
| 文字列コンテキスト | null |