【node.js】javascriptは参照データを変更すると参照先データも変更される【参照渡し】

必要なもの

・node.js

参照渡しとは?

javascriptは他の言語と違い、 プリミティブ型以外の代入を行うと参照そのものを渡される。そのため、代入された変数に対してあーだこーだすると代入した変数も変化します。 以下のコードが簡単な例です。

var main
var sub
main = ['a', 'b', 'c']
sub = main

console.log(main) // [ 'a', 'b', 'c' ]
console.log(sub)   // [ 'a', 'b', 'c' ]

sub.push('d')

console.log(main)  // [ 'a', 'b', 'c', 'd' ]
console.log(sub)   // [ 'a', 'b', 'c', 'd' ]

var string1 = 'a'
var string1Sub = string1

stringSub = 'b'

console.log(string1)   // a
console.log(stringSub) // b

javascriptのプリミティブ型

・数値
・文字列
・boolean
・null
・undefined

オブジェクトを参照しつつ、元の変数に影響を与えないようにするには

concat関数を利用することで別の値として代入を行う

var main
var sub
main = ['a', 'b', 'c']
sub = main.concat()

console.log(main) // [ 'a', 'b', 'c' ]
console.log(sub)   // [ 'a', 'b', 'c' ]

sub.push('d')

console.log(main)  // [ 'a', 'b', 'c']
console.log(sub)   // [ 'a', 'b', 'c', 'd' ]

concat()はそもそも配列やjsonをを結合するなどを目的に利用することが多いのですが、引数をなくすことで結合ではなくその配列をそのまま新しいオブジェクトとして生成してくれます。

javascriptでプリミティブ型以外を代入する時には参照元が変化しても問題ないか考えてみてください

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です