値タイプ(Value Type)と引用タイプ(Reference Types)

1316 ワード

Javascriptには二つの基本データタイプがあります.値タイプ(Value Types)と引用タイプ(Reference Types)です.
値の種類には、
  • Number
  • String
  • Boolean
  • Symbol
  • undefined
  • null
  • 参照の種類は以下の通りです.
  • Object
  • Function
  • Aray
  • 値の種類と引用の種類にはどのような違いがありますか?
    let x = 10;
    let y = x;
    x = 20;
    
    私たちは今、xとyのそれぞれの値を確認します.
    x
    >>> 20
    
    y
    >>> 10
    
    可視xとyは互いに独立している.xの値をyに割り当てると、xの値を変数yにコピーするだけです.
    引用の種類を使って何が起こるか試してみます.
    let x = { value: 10 };
    let y = x;
    x.value = 20;
    
    検査xとyの値:
    x
    >>> {value: 20}
    
    y
    >>> {value: 20}
    
    xオブジェクトを修正するとyオブジェクトもそれに応じて変化することが分かります.xとy変数はオブジェクトのメモリアドレスを指しているだけです.xをyに賦課する時はyも対象を指すだけです.
    まとめて言うと、値の種類は値をコピーし、オブジェクトの参照の種類は参照をコピーします.
    次の例を見てください.
    let number = 10;
    
    function increase(number) {
      number++
    };
    
    increase(number);
    console.log(number);
    
    //     :
    10
    
    値タイプnumberが関数increaseに入ると、その値が関数に与えるローカルパラメータだけがコピーされますので、関数の実行はnumberを変更しません.
    次に参照の種類を見てみます.
    let number = { value: 10 };
    
    function increase(number) {
      number.value++
    };
    
    increase(number);
    console.log(number);
    
    //     :
    // {value: 11}
    
    オブジェクトがパラメータとして関数に伝達される場合、参照で伝達されます.関数内のパラメータnumberと外のnumberは同じオブジェクトを指します.関数内でnumberを修正すると関数外のnumberも変わります.