メンバ演算子
メンバ演算子は、ドット記法または中括弧記法を使用することで、オブジェクトのプロパティへのアクセスを提供します。
文法
object.property //ドット記法
object["property"] //中括弧記法
説明
オブジェクトは、連想配列(別名: map
、,dictionary
、hash
、lookup table
)として考えることが出来ます。
この配列のキーは、オブジェクトのプロパティの名前です。
オブジェクトのプロパティについて話す際には、一般的にはプロパティとメソッドを区別します。
ただし、プロパティ/メソッドの区別に大した意味はありません。(翻訳に自信なし)
例えば、もしその値として関数インスタンスへの参照を持つ場合、
メソッドは呼び出すことが出来る単なるプロパティでしかありません。(翻訳に自信なし)
より詳細な例と説明については、 JavaScript guide about functionsを参照してください。
ドット記法
get = object.property;
object.property = set;
プロパティは有効なJavaScriptの識別子でなければいけません。
つまり、アンダースコア("_
")とドル記号("$
")も含む、数値から始まらない一連なりの英数字です。
例えば、object.$1
は有効ですが、object.1
は無効です。
例:
document.createElement('pre');
ここでは、"createElement"という名前のメソッドが、document
から検索され、呼び出されています。
中括弧記法
get = object[property_name];
object[property_name] = set;
property_name
は文字列です。
この文字列は有効な識別子である必要はありません。
どのような値でもよく、例えば"1foo"、"!bar!"、" "(空白)でも構いません。
例:
document['createElement']('pre');
これは、前述した例と全く同じ事をしている事になります。
プロパティ名
プロパティ名は文字列でなければいけません。 これは非文字列オブジェクトは、オブジェクトのキーとして使用出来ない事を意味します。 数値を含む非文字列オブジェクトは、 toStringメソッドを通して文字列に型変換されます。
例
var object = {};
object['1'] = 'value';
alert(object[1]);
これは1
が型変換されて'1'
になるため、"value"が出力されます。
var foo = {unique_prop: 1}, bar = {unique_prop: 2}, object = {};
object[foo] = 'value';
alert(object[bar]);
この例でも、fooとbarの両方が同じ文字列("['object Object']")に変換されるため"value"を出力します。 SpiderMonkeyのJavaScriptエンジンでは、 この文字列は"['object Object']"になります。
メソッドのバインディング
メソッドは、メソッドのオブジェクトにバインドされません。
とりわけthis
はメソッド内で固定されず、
this
はそのメソッドを含むオブジェクトを参照する必要はありません。
this
は、関数呼び出しの代わりに"渡されます"。(翻訳に自信なし)
詳細は、thisのバインドに関する記述を参照してください。
evalでの注意事項
JavaScriptの初心者は、中括弧記法が使用できるケースで、 代わりにevalを誤って使用することがあります。 例えば下記のような文法が、多くのスクリプトで見受けられます。
x = eval('document.forms.form_name.elements.' + strFormControl + '.value');
evalは処理が遅く、可能な限り使用を避けるべきです。 また、strFormControlはフォーム要素(control)に必須とされない名前とIDの識別子を保持しなければならないでしょう。(翻訳に自信なし) 代わりに中括弧記法を使用するのが良いでしょう。
x = document.forms["form_name"].elements[strFormControl].value;
仕様
ブラウザ互換性
機能 | Chrome | Firefox (Gecko) |
IE | Opera | Safari |
---|---|---|---|---|---|
基本 | ◯ | ◯ | ◯ | ◯ | ◯ |
機能 | Android | Chrome for Android |
Firefox Mobile |
IE Mobile |
Opera Mobile |
Safari Mobile |
---|---|---|---|---|---|---|
基本 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
関連項目
© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。
- 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
- 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
- MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
- "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。