技術とかの雑なToday I Learnedメモ

JavaScriptにおける参照渡しと値渡しをもう忘れたくない

JavaScriptにおける参照渡しと値渡しをもう忘れたくない

参照渡しと値渡しがスッキリわかった件【VueでToDoリスト】|木脇|note

何度もこういう記事読んでは理解したってなるけど忘れるので何度でも書いておいたほうがいい気がして書いた。

JavaScriptはプリミティブ型は値渡しでオブジェクト型は参照渡し。

記事の例にあるように、

//例1
var a = 10 //これは数値型。
     b =  a //数値だから値渡し。
     b =  5 //変数bの値を5に変更。
console.log(b) //5
console.log(a) //10

こう。

これのb = aの部分、個人的にちょっと曖昧だった(参照渡してる気もするような気がしていた)が、値渡しなので、「変数の値がプリミティブ型だったら値渡し」になることを覚えておこう。

ちなみに、

//例2
var a = { 10 } //オブジェクト型だから参照渡し
     b = a   //意味「変数bも変数aと同じメモリを参照しろよ!」
     b = { 9 } //変数b「メモリ(参照している場所)の{ 10 }を{ 9 }に変えとくわ。」
console.log(b) // { 9 }
console.log(a) // { 9 }

const a = { 10 }みたいな書き方できたっけ?って思ってdevtoolsのconsoleでやってみたらできなかった。なんかconst { a, b } = hogeみたいに分割代入できるし書き方がちょっとだけ似てたので一瞬迷ったけど、さすがにこれはできないよね。なので記事を書いた方がたぶんミスっているんだと思う。

あれ、配列は?って思ったけど、配列もオブジェクト型とのこと。

Array - JavaScript | MDN

配列はリストのようなオブジェクトであり、そのプロトタイプは配列に対して横断的な操作や変更を行うメソッドを持っています。 JavaScript の配列は、要素数も要素の型も固定されていません。配列の長さは常に可変であり、データを連続しない位置に格納できるため、 JavaScript の配列は密であることが保証されていません。これはプログラマーの使い方次第です。一般に、これらは便利な特性です。しかし、もし特定の用途で望ましくないのであれば、型付き配列を使用したほうが良いかもしれません。

こういう基礎的なことも曖昧だったので覚えておかなくては……。