No.3 値渡しと参照渡し
以前にJavaScriptのデータ型についてご紹介しましたが、その際に触れなかった値渡しと参照渡しについて今回ご紹介しようと思います。
データ型の種類
以前にご紹介したと思いますがおさらいにJavaScriptのデータ型を一覧しておきます。
- 数値型
- 文字列型
- 論理型
- 関数型
- オブジェクト型
- 配列型
- null
- undefined
- RegExp型
- 日付型
- Error
JavaScriptは、他の言語に比べて型が厳格な言語ではありません。変数にどんな型のデータでも格納することでき、自動的に変換される仕組みになっているため、しっかりと型を意識していないと思わぬバグを招くことがあります。
JavaScriptでプログラミングを行う場合、これらのデータ型の特徴をしっかりと理解して扱う必要があります。
JavaScriptでは、データ型を大きく2つに分類することができます。1つがプリミティブ型、もう1つがオブジェクト型です。
プリミティブ型の特徴(値渡し)
プリミティブ型とは、文字列型、数値型、論理型、null、undefinedを指します。この型は、値を代入したときに値渡しになります。
1 2 3 4 5 6 7 | var s = 'Hello'; // "Hello" var t = s; // "Hello" s += 'World'; console.log(s); // "HelloWorld" console.log(t); // "Hello" |
上記の例では、変数sを変数tに代入していますが、sの値は文字列型のため値渡しになります。そのため、tに代入された後、sの値を変更しても影響が無いことがわかります。
オブジェクト型の特徴(参照渡し)
オブジェクト型とは、プリミティブ型以外の型を指します。プリミティブ型とは違い値を代入すると参照渡しになります。
1 2 3 4 5 6 7 | var arr = [1, 2, 3]; var dst = arr; arr[1] = 9; console.log(arr[1]); // 9 console.log(dst[1]); // 9 |
JavaScriptでは、配列もオブジェクトとして扱われます。変数arrの値を、変数dstに代入した場合、参照渡しになります。arrの値を変更した場合、dstの値も参照なので変更されます。正確には、両方が変更されるわけではなく、両変数が参照している先が変更されています。
今回は、ここまでです。
値渡しと参照渡しを簡単にイメージすると
値渡しとは、変数の値をコピーする渡し方で、参照渡しとは、変数を共有するような渡し方といった感じです。
ちなみに英語で値渡しはcall by value 、参照渡しはcall by reference と書きます。
次回は、コンストラクタです。
それでは、次回お楽しみに!