プリミティブ値とオブジェクト

JavaScriptの値を分類すると値を一つだけ持つ「プリミティブ値」と複数の値を持つことが出来る「オブジェクト」に分類。

プリミティブ値

プリミティブ値は値の保持が1つだけ。なので配列はプリミティブ値ではない。

プリミティブ値の型は5種類のみ

  • Null型
  • Undefined型
  • Boolean型
  • Number型
  • String型

型の種類は意外と少ないのでとっつきやすい^^

プリミティブ値のコピーは値渡しなので、コピーした値を変更しても元の値は変わらない

var a = "あ";
var b = a;
b="い";
console.log(a); 	// あ(もとの値は変わらない)

プリミティブ値は関数の引数として渡しても、元の値が変わらない

function countUp(cnt){
	cnt++;
}

var cnt = 0;			// Number型のプリミティブ値を定義
console.log(cnt);		// 0
countUp(cnt);			// プリミティブ値を引数にして関数を呼び出し
console.log(cnt);		// 0 (プリミティブ値は値が変わらない)

オブジェクト

プリミティブ値以外の値はオブジェクト。オブジェクトは値を複数持つことが出来る

最初から使える組み込みオブジェクトの種類は7種類

  • Object
  • Array
  • RegExp
  • Function
  • String
  • Number
  • Boolean

大もとはObjectクラス。他のオブジェクトはObjectクラスから継承したインスタンスという事らしい。

オブジェクトのコピーや関数への引数とした場合は参照渡しとなり、もとの値が変わる。プリミティブ値との違いとして把握しておかなきゃいけない。

オブジェクトをコピーした時の動作

var obj1 = { a : "あ" };	
var obj2 = obj1;		// オブジェクトのコピー
obj2.a = "い";			// コピーしたオブジェクトで値を変更
console.log(obj1.a);	// い (もとの値が変わる)

オブジェクト関数の引数として渡した時の動作

function objCountUp(obj){
	obj.cnt++;
}

function aryCountUp(ary){
	ary[0]++;
}

var obj = { cnt : 0 };	// Object型
var ary = [0,1,2];		// Array型

console.log(obj.cnt);	// 0
objCountUp(obj);
console.log(obj.cnt);	// 1(オブジェクトなので値が変わる)

console.log(ary[0]);	// 0
aryCountUp(ary);
console.log(ary[0]);	// 1(Arrayもオブジェクトなので値が変わる)

プリミティブ値なのかオブジェクトなのかで、値渡しなのか参照渡しなのかを意識しておかないとね^^