JavaScript - プリミティブ型とオブジェクト

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

JavaScript では、プリミティブ型とオブジェクトでは、基本的に異なります。

プリミティブ型はプリミティブ型値を変更する方法がないため不変です。文字列を変更するように見えるメソッドは、すべて文字列を変更するのではなく新たな文字列を返しています。

var s = "hello";
s.toUpperCase(); // HELLO
console.log(s);  // hello
不変なプリミティブ型

不変なプリミティブ型に対してオブジェクトは可変であり、値を変更できます。

var o = { x:1 }; // オブジェクトは可変
o.x   = 2;       // プロパティの値を変更
o.y   = 3;       // 新しいプロパティを追加
可変なオブジェクト

値の比較においてもプリミティブ型とオブジェクトでは判定方法が異なります。

プリミティブ型は値で比較します。2 つのプリミティブ型値が同じ値を持つ場合にのみ、2 つの値は等しいと判定されます。

オブジェクトの比較は値では行いません。同じプロパティ名と値を持っていても 2 つのオブジェクトは等しいとは判定されません。

var o = {x:1}, p = {x:1};
o === p // false
オブジェクトの比較

2 つのオブジェクト値は、両方が同じオブジェクトを参照している場合のみ同一と判定されます。

var a = [];
var b = a;  // b は a の配列を参照する。
a === b     // true
オブジェクトの比較

上記の例では、オブジェクトのコピーを作成しているわけではありません。変数にオブジェクトを代入すると、オブジェクトを参照することになります。

var a = [];
var b = a;

b[0] = 1;
console.log(a[0]); // 1
オブジェクトの参照

オブジェクトや配列のコピーを作成したい場合は Object.assign を使います。

var obj = { a: 1 };
var copy = Object.assign({}, obj);
console.log(copy); // { a: 1 }
オブジェクトのコピー

関連記事

JavaScript のまとめページはプログラミング JavaScript 入門を参照してください。

Category:
プログラミング
公開日:
更新日:
Pageviews:
34
Shares:
0
Tag:
JavaScript
hatebu icon
hatebu