valueOfメソッド

広告

valueOfメソッドは対象のオブジェクトの基本データ型の値を返します。

オブジェクトに基本データ型の値があればそれを返します。

パラメータ:
  無し
戻り値:
  オブジェクトの基本データ型の値。基本データ型の値が無ければオブジェクト
  そのものを返す

オブジェクトの基本データ型の値が必要とされる時があります。例えばオブジェクトを数値に変換する場合などです。(詳しくは「数値への変換」を参照して下さい)。

このような場合にオブジェクトはvalueOfメソッドを自動的に呼び出し、そのオブジェクトの基本データ型の値を取得します。

次の例を見て下さい。

var obj = new Object();
alert(typeof obj.valueOf());

Objectクラスのオブジェクトの場合、基本データ型の値がありませんのでオブジェクトそのものを返します。typeof演算子で確認すると次のように表示されます。

object

Numberクラス、Stringクラス、Booleanクラスのオブジェクトの場合、それぞれ数値、文字列、論理値の基本データ型の値を返します。

次の例を見て下さい。

var num_obj = new Number(10);
alert(typeof num_obj.valueOf());

この場合は次のように表示されます。

number

Objectクラスを継承しているクラスでvalueOfメソッドを再定義しなかった場合はオブジェクトクラスと同じようにオブジェクトそのものを返します。クラスによってはvalueOfメソッドを再定義し、基本データ型の値として何らかの値を返すように定義されているクラスもあります。

次の例を見て下さい。

var d = new Date();
alert(typeof d.valueOf());

この場合は次のように表示されます。

number

Dateクラスの場合はvalueOfメソッドが値をミリ秒で表した数値型の値を返すようになっているため、typeof演算子で確認すると「number」を返すことになります。

サンプルコード

では簡単なサンプルで試してみます。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>JavaScript テスト</title>
</head>
<body>

<script type="text/javascript" src="./js/script5_1.js">
</script>

</body>
</html>
function print(str){
  document.write(str + "<br />");
}

var obj = new Object();
var num_obj = new Number(45);
var str_obj = new String("Hello");
var bool_obj = new Boolean(true);
var ary = new Array();
var d = new Date();

document.write("<p>");

print("Object.valueOf --> " + typeof obj.valueOf());
print("Number.valueOf --> " + typeof num_obj.valueOf());
print("String.valueOf --> " + typeof str_obj.valueOf());
print("Boolean.valueOf --> " + typeof bool_obj.valueOf());
print("Array.valueOf --> " + typeof ary.valueOf());
print("Date.valueOf --> " + typeof d.valueOf());

document.write("</p>");

上記を実際にブラウザ見てみると次のように表示されます。

p5-1

( Written by Tatsuo Ikura )