#はじめに
最近始めた[JavaScript]がよく理解が出来ていないので、これを機会に書いてみようか、と思いまして書く事にしました。
本やサイトで学んだ事を気ままにここに記そうと思います。
ちなみに好きな言語は[C/C++]です。(好きなだけでバリバリはできません・・・。)
#変数の宣言
var a = 5;
console.log(a);
// 5
var a;
console.log(a);
// 5
宣言しただけで何も代入をしないと[undefine値]になる。
また、同じ変数をもう1度宣言しても値がクリアされないみたい。
そんな時、こういう形にすればいい!
var a = a || 5
イディオムの一種で、変数[a]が既に宣言されていて且つ、値が代入済みであれば何もしないという処理に出来る。
(*)ここでイディオムという言葉が出てきたので[JavaScript]のイディオムについて調べましたが、書ききれそうにないのでまた別の機会に。
#変数の参照
var a = { x:0, y:1 };
var b = a;
b.x++;
console.log(b.x);
// 2
console.log(a.x);
// 2
このように[b]の参照するオブジェクトを変更すると、[a]まで変わりました。これは同じオブジェクトを参照しているからだそうです。
これは忘れて引っかかりそうだ・・・。
また、上とは別に下のものは
var a = { x:0, y:1 };
var b = a;
a = { x:1, y:2 };
console.log(b.x);
// 0
参照型変数で行ったことは参照先のオブジェクトの変更で、変数の値の変更ではないみたい。
なので、[b]の値は[0]から変わらなかったということ。
うわぁ・・・、これはややこしい。
#関数の値渡し
// 値を入れ替える
function change(a, b){
var tmp = a; // tmpに一旦格納しておく
a = b;
b = tmp;
}
var hoge = 3;
var piyo = 4;
change(hoge,piyo); // 値を入れ替える
console.log(hoge, piyo);
// 3, 4
[C/C++]をやったことある人はこれをやってしまいそう?(私はやりそう)ですが、これでは先程の話と同様、値は変わらないみたい。
参照演算子やポインタ演算子がある言語では出来るのですが、[JavaScript]にはそのような言語機能がないみたいなのでこの方法では無理。
じゃあどうすればいいんだ・・・?
var hoge = 3;
var piyo = 4;
// 値を入れ替える
var parts = [piyo, hoge];
hoge = parts[0];
piyo = parts[1];
console.log(hoge, piyo);
// 4, 3
こうやってやるみたい。
配列を渡して要素を変更したりオブジェクトの参照を渡してプロパティ値を変更。
#終わりに
私と同様、初めたばかりの人の力になれたらと思います。
そして、まだまだ[JavaScript]の道は長そうです・・・。