プリミティブ値と非プリミティブ値を理解する
7908 ワード
JavaScript のプリミティブ値は、プロパティやメソッドを持たない値です. Javascript には、プリミティブ値の 5 つのデータ型があります.
文字列 番号 ブール値 ヌル 未定義
一方、非プリミティブ値は、プロパティまたはメソッドを持つ値です. Javascript には、非プリミティブ値の 2 つのデータ型があります.
オブジェクト 配列
プリミティブ値と非プリミティブ値の違いは、プリミティブ値は不変であるのに対し、非プリミティブ値は変更可能であることです.もう 1 つの違いは、値によるプリミティブ値のコピー、参照による非プリミティブ値のコピーです.
値によるコピーとは何かを理解するために、例を見てみましょう.
この例では、変数 a の値を 17 に設定しますが、実際に舞台裏で行われるのは、javascript が javascript メモリに予約済みスペースを作成し、その予約済みスペースに値 17 を格納することです.例を簡単にするために、予約済みスペースが呼び出されたとします.
次に、別の変数を設定します.何が起こるか見てみましょう.
実際に起こるのは、javascript が
変数
変数
javascript は
以下の例を見て、参照によるコピーとは何かを理解しましょう.
この例では、変数 car の値をオブジェクトで設定します.値によるコピーと同様に、javascript はメモリ内に領域を予約し、予約領域内にオブジェクトの値を格納します.簡単にするために、予約領域が
別の変数を設定しましょう.
次に、car オブジェクト内のキー
これをメモリ参照で理解しましょう.変数
これにより、car オブジェクト内のキー
一方、非プリミティブ値は、プロパティまたはメソッドを持つ値です. Javascript には、非プリミティブ値の 2 つのデータ型があります.
プリミティブ値と非プリミティブ値の違いは、プリミティブ値は不変であるのに対し、非プリミティブ値は変更可能であることです.もう 1 つの違いは、値によるプリミティブ値のコピー、参照による非プリミティブ値のコピーです.
値によるコピー
値によるコピーとは何かを理解するために、例を見てみましょう.
let a = 17
この例では、変数 a の値を 17 に設定しますが、実際に舞台裏で行われるのは、javascript が javascript メモリに予約済みスペースを作成し、その予約済みスペースに値 17 を格納することです.例を簡単にするために、予約済みスペースが呼び出されたとします.
001
.let a = 17
// memory 001 = 17
次に、別の変数を設定します.何が起こるか見てみましょう.
let a = 17
// memory 001 = 17
let b = a
実際に起こるのは、javascript が
a
メモリに格納されている 001
変数内の値をコピーして変数 b
に割り当て、次に javascript が変数 b
用にメモリ内の別のスペースを予約したことです.let a = 17
// memory 001 = 17
let b = a
// memory 002 = 17
変数
002
の値を変更するとどうなるでしょうか.a = 15;
console.log(a);
// 15
console.log(b);
// 17
変数
a
を変更すると、変数 a
の値も変更されるべきではないのでしょうか?javascript は
b
メモリ内に保存されている値を 15 に変更しますが、予約済みスペース 001
メモリに変更がないため、変数 b
の値は 17 のままです.これは値によるコピーと呼ばれます.a = 15;
console.log(a);
// 15
// memory 001 = 15
console.log(b);
// 17
// memory 002 = 17
参照によるコピー
以下の例を見て、参照によるコピーとは何かを理解しましょう.
var car = {
name: 'Ford',
type:'Fiesta',
horsePower: 100
};
この例では、変数 car の値をオブジェクトで設定します.値によるコピーと同様に、javascript はメモリ内に領域を予約し、予約領域内にオブジェクトの値を格納します.簡単にするために、予約領域が
002
と呼ばれるとしましょう.var car = {
name: 'Ford',
type:'Fiesta',
horsePower: 100
};
// memory 003 = {name: 'Ford', type: 'Fiesta', horsePower: 100}
別の変数を設定しましょう.
var car = {
name: 'Ford',
type:'Fiesta',
horsePower: 100
};
var anotherCar = car;
次に、car オブジェクト内のキー
003
の値を変更します.何が起こるか見てみましょう.car.type = 'Focus';
console.log(car.type);
// Focus
console.log(anotherCar.type);
// Focus
これをメモリ参照で理解しましょう.変数
type
を作成するときに、javascript メモリにもスペースを予約しました.簡単にするために anotherCar
と呼びましょう.ただし、メモリ 004
内に保存されている値は、変数 004
の予約スペースのアドレスではなく、単純な car
メモリ内の car
オブジェクト値からコピーされません. 004
を格納します.var car = {
name: 'Ford',
type:'Fiesta',
horsePower: 100
};
// memory 003 = {name: 'Ford', type: 'Fiesta', horsePower: 100}
var anotherCar = car;
// memory 004 = 003
これにより、car オブジェクト内のキー
003
の値を変更すると、変数 type
内のキー type
の値も変更される理由が説明されます. anotherCar
変数は、anotherCar
変数が指しているのと同じメモリアドレスを指しているためです.Reference
この問題について(プリミティブ値と非プリミティブ値を理解する), 我々は、より多くの情報をここで見つけました https://dev.to/elukuro/understanding-primitive-values-vs-non-primitive-values-1oj6テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol