型(プリミティブ・オブジェクト) : JavaScript


JavaScriptの型についてのメモ(2010.11.30 追記あり)
JavaScriptはプリミティブなデータを除いてすべてオブジェクト。

» データ構造 – JavaScript | MDN

プリミティブなデータ

JavaScriptは次のデータ型をプリミティブなデータと呼ぶ。

  • Number 数値型
    typeofの値はnumber。
  • String 文字列型
    typeofの値はstring。
  • Boolean ブール型
    Boolean型の値はtrueかfalse。typeofの値はboolean。
  • Null型
    Null型の値は唯一null 。typeofの値はobject[1]。
  • Undefined型
    Undefined型の値は唯一undefined。typeofの値はundefined。

UndefinedとNullはJavaScriptのnull型とundefined型 | FindxFine -Web制作に関するメモ-に記載。

[1] nullのtypeof演算子の結果はobjectになるので注意する。

プリミティブなデータの特徴

  • プリミティブなデータはイミュータブル。イミュータブルとはメモリアドレスに値そのものが格納されてその値を変更できないこと[1][2]
    » イミュータブル- Wikipedia
  • ブール型・数値型・文字列型はラッパーによりメソッドが提供されている。例えば文字型.charAtメソッドなどがある[3]
  • プリミティブなデータは値渡しである。オブジェクトは参照(の値)渡し。
    » 値渡し,参照渡し : Javascript

[1] var a = ‘a’; a = ‘b’;ができないということではない。そうしたときはメモリアドレス自体を新たにする。
[2] プリミティブなデータとオブジェクトの違いのひとつはプリミティブなデータはイミュータブルなデータ(スカラー)でありオブジェクトはミュータブル(変更可能)なデータの集合体という点。
Douglas Crockford著, 水野貴明訳 (2008) 『JavaScript: The Good Parts 「良いパーツによるベストプラクティス」』 オライリー・ジャパン
[3] JavaScriptはプリミティブなデータ型でもラッパーでメソッドが実装されている。

オブジェクト(Object)

JavaScriptのプリミティブ以外のデータはオブジェクトである。関数・配列・正規表現リテラルもオブジェクトである。
JavaScriptのオブジェクトは名前と値のペアを管理するもので他の言語のハッシュに相当する。

  • インスタンス
    インスタンスはオブジェクト。typeofの値はobject。
  • 関数
    関数はオブジェクト。オブジェクトを強調して関数オブジェクトともいう。ただしtypeofの値は専用のfunctionが用意されている。
  • 配列
    配列はオブジェクト。
    配列オブジェクトはlengthプロパティや多くのメソッドを持つ。typeofの値はobject。
  • 正規表現リテラル
    正規表現リテラルはオブジェクト。matchやreplaceなどのメソッドを持つ。 typeofの値はobject。

typeof演算子の値

// 文字型
console.log(typeof 'abc'); // string
// 数値型
console.log(typeof 10); // number
// ブーリーン型
console.log(typeof true) // boolean
// null型
console.log(typeof null); // null
// undefined型
console.log(typeof undefined); // undefined
// object型
console.log(typeof {
    x: 10
}); // object
// object型 関数はfunctionという専用の値を持つ
console.log(typeof
function foo(x) {
    return 2 * x;
}); // function
// object型 配列はobject
console.log(typeof[1, 2, 3]); // object
// object型 正規表現リテラルはobject
console.log(typeof /abc/); // object

コメント

No comments yet.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。