JavaScript 第5版 - 7章 オブジェクトと配列(1)

JavaScript 第5版、「7章 オブジェクトと配列」の「7.1 オブジェクトの生成」~「7.4 Objectのプロパティとメソッド」(105~112ページ)を読み進めていきます。

7.2 オブジェクトのプロパティ

7.2.2 プロパティの存在確認

プロパティの存在を厳密に確認するにはin演算子を使います。

if ('x' in o) o.x = 1;

存在しないプロパティから値を読み出すと未定義値(undefined)が返されることを利用して、次のようなコードでも同じことができます。

if (o.x !== undefined) o.x = 1;

ただし、この方法では、プロパティは存在するのに値が未定義値であるプロパティを区別することはできません。

未定義値に加えて、nullも区別しない場合には次のように書けます。

if (o.x) o.x = 1;

7.4 Objectのプロパティとメソッド

  • JavaScriptの全てのオブジェクトはObjectクラスを継承する。

7.4.1 constructorプロパティ

  • JavaScriptのオブジェクトは全てconstructorプロパティを持つ。
  • オブジェクトの初期化で使用されたコンストラクタ関数を参照する。

次のように、特定のオブジェクトの型を調べるのに使えます。

if ((typeof o == 'object') && (o.constructor == Date))

instanceof演算子でも同様のことができます。

if ((typeof o == 'object') && (o instanceof Date))

7.4.2 toString()メソッド

  • オブジェクトを文字列に変換する必要があると判断されると呼び出される。

7.4.3 toLocaleString()メソッド

  • デフォルトのtoLocaleString()メソッドはtoString()と同じ文字列を返す。
  • ECMAScript v3では、Array、Date、NumberクラスのtoLocaleString()メソッドはローカライズされた文字列を返すように既定されている。

7.4.4 valueOf()メソッド

  • デフォルトのvalueOf()メソッドは何も変換しない。
  • 組み込みクラスの一部(例えば、Dateクラス)には、独自のvalueOf()メソッドを定義しているものがある。

7.4.5 hasOwnProperty()メソッド

  • 呼び出しで使用したオブジェクトが、引数で指定した名前の継承したものでないプロパティを持つ場合にtrueを返す。それ以外はfalseを返す。
var o = {};
o.hasOwnProperty('toString');  // false。toStringはObjectクラスから継承されたプロパティ。
Math.hasOwnProperty('cos');  // true。Mathクラスはcosプロパティを持つ。

7.4.6 propertyIsEnumerable()メソッド

  • 呼び出しで使用したオブジェクトが、引数で指定した名前の継承したものでないプロパティを持ち、そのプロパティがfor/inループで調べられる場合にtrueを返す。それ以外はfalseを返す。
  • ユーザが定義したプロパティは全てfor/inループで調べられる。つまり、propertyIsEnumerable()メソッドはhasOwnproperty()メソッドと同じ値を返す。

7.4.7 isPrototypeOf()メソッド

  • 呼び出しで使用したオブジェクトが、引数で指定したオブジェクトのプロトタイプオブジェクトである場合にtrueを返す。それ以外はfalseを返す。
var o = {};
Object.prototype.isPrototypeOf(o);  // true。o.constructor == Object。
Function.prototype.isPrototypeOf(Object);  // true。Object.constructor == Function。

コメント (0)

この記事へのコメントはまだありません。

コメントフォーム

トラックバック (0)

この記事へのトラックバックはまだありません。

この記事のトラックバックURI
http://dxd8.com/archives/64/trackback/
この記事のURI
http://dxd8.com/archives/64/