型(プリミティブ・オブジェクト) : JavaScript
JavaScriptの型についてのメモ(2010.11.30 追記あり)。 JavaScriptではプリミティブなデータを除いてすべてオブジェクトである。
プリミティブなデータ
JavaScriptでは以下のデータ型をプリミティブなデータと呼ぶ。
- 文字列型 typeofの値はstring
- 数値型 typeofの値はnumber
- ブール型 typeofの値はboolean
- null typeofの値はobject[1]
- undefined typeofの値はundefined
[1] nullのtypeof演算子の結果はなぜかobjectになるので注意する。
プリミティブなデータの特徴
-
プリミティブなデータはイミュータブル—設定した値を変更することができない—である[1]。
» イミュータブル- Wikipedia - ブール型・数値型・文字列型はメソッドを持つ。例えば文字型.charAtメソッドなどがある[2]。
-
プリミティブなデータは値渡しである。オブジェクトは参照渡しである。
» 値渡し,参照渡し : Javascript
オブジェクト
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
undefined型とnull型
undefinedとnullのメモ。
- undefined == nullはtrueになる(===はfalse)。
- typeof nullはobjectになる。
// undefined == null => trueとなることに気をつける
// undefindは未定義値というより未設定値
var x;
console.log(x); // undefied ※ nullではない
console.log(typeof x); // undefined
console.log(x === undefined); // true
console.log(x === null); // false
console.log(x == null); // true ※不思議な仕様 undefinedかどうかの判定は===を使う
// nullはオブジェクトが何も参照していない状態
// 変数をnullにするには明示的にnullを設定する(p61)
var o = {};
console.log(typeof o); // object
o = null; // nullを設定
console.log(o); // null
console.log(typeof o); // object ※なぜかobject(バグと言うひとも)
console.log(o === null); // ture
console.log(o == undefined); // nullかどうかを判定するには === を使う
1. プリミティブなデータとオブジェクトの違いの大きな点のひとつはプリミティブなデータはイミュータブルなデータ(スカラー)である。一方オブジェクトはミュータブル —変更可能— なデータの集合体である。
Douglas Crockford著, 水野貴明訳 (2008) 『JavaScript: The Good Parts 「良いパーツによるベストプラクティス」』 オライリー・ジャパン
2. JavaScriptはプリミティブなデータ型でもメソッドが実装されている。
関連記事
- 関連記事は見つかりませんでした。
検索ボックスからの検索もお試しください。
コメント
コメントはまだありません。
コメントの投稿
改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。
トラックバックURL
http://www.findxfine.com/programming/javascript/228.html/trackback