必要なもの
・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でプリミティブ型以外を代入する時には参照元が変化しても問題ないか考えてみてください
コメントを残す