Hatena::Groupmnemonic

きおく屋めがねばし

 | 

2012-12-29

「3.7 不変な基本型値と可変なオブジェクト参照」

Immutable Primitive Values and Mutable Object References

JavaScript では、基本型値 (nndefined、null、論理値、数値、文字列) とオブジェクト (配列、関数) の間には、基本的な部分に違いがあります。

まず、基本型は不変です。

文字列を変更するように見えるメソッドはすべて、文字列を変更するのではなく、新たな文字列を返しています。

var s = "hello";    // Start with some lowercase text
s.toUpperCase();    // Returns "HELLO", but doesn't alter s
s                   // => "hello" : the original string has not changed

また、基本型は値で比較します。

これに対して、オブジェクトは可変です。つまり、値を変更できます。

var o = { x:1 };    // Start with an object
o.x = 2;            // Mutate it by changing the value of a property
o.y = 3;            // Mutate it again by adding a new property

var a = [1,2,3]     // Arrays are also mutable
a[0] = 0;           // Change the value of an array element
a[3] = 4;           // Add a new array element

オブジェクトは値では比較しません。

オブジェクトは、JavaScript の基本型と区別するために、参照型と呼ばれることもあります。この言葉を使えば、オブジェクトの値は参照であり、オブジェクトは参照で比較すると言います。つまり、2つのオブジェクト値は、両方が同じオブジェクトを参照している場合のみ同一と判定されます。

var a = [];    // 空の配列を参照する変数 a。
var b = a;     // これで b も同じ配列を参照する。
b[0] = 1;      // 変数 b を使って配列を参照し更新する。
a[0]           // => 1: 変更された内容は変数 a からも確認できる。
a === b        // => true: a と b は同じオブジェクトを参照するので、等しいと判定される。

トラックバック - http://mnemonic.g.hatena.ne.jp/paragramma/20121229
 |