前置き
こんにちは、2記事目ですね。
最近になって JavaScript を勉強し始めた、プログラミング初心者の @mt_tai です。
今回は、JavaScript を勉強し始めて個人的に新鮮に思ったことを書いていきます。
と言いましても、まだ勉強を始めて1週間と経っておらず、知らないことの方が圧倒的に多いため、
周知の事実をさも新発見のごとく書いてしまうかもしれませんが、そこは初心者を免罪符に許してもらえたらと。
JavaScriptの '型' について
今回 JavaScript を学習するにあたって、変数宣言の時点でいきなり言語間の壁にぶち当たりました。
というのも、例えば javaScript で変数宣言の一例を挙げると
var num = 256;
var string = "Hello World!";
のように宣言できるわけです。え? 何もおかしくない? そうですね。
でも私はこれを見て思ってしまったんです。
「型の宣言はどこ?」
これには私の学習経歴が関係してまして、今までで学習したことのあった言語がC言語だったんですね。
ちなみにC言語で同じように宣言する一例を挙げさせてもらうと
int num = 256;
char string[] = "Hello World!";
のように書けると思います。
変数名以降は同じですが、手前についているのが JavaScript では一貫してvar
であるのに対し、C言語ではint
やchar
であるといった点が異なってますね。
(とりあえず今回は `型` にだけ注目しているので、C言語の配列のことは無視します…)
どうやら JavaScript では宣言はvar
で行えるみたいですね。型宣言はいらないのか。
他にも変数宣言に用いるキーワードとして、var
だけでなくlet
やconst
などもあるらしいです。
JavaScript はvar
で統一して宣言できる分、データ型に関するところが甘いらしく、明示的な型変換を行わなくとも以下のようなことができるみたいです。
var num = 1024;
var string = "2の10乗は"
var sum = string + num;
console.log(sum); // コンソールには "2の10乗は1024" と表示される.
とても新鮮です。これで通ってしまうことが。
ここまでで JavaScript の洗礼を (勝手に) 受けた私ですが、もうひとつ新鮮なことがありました。
等価演算子(==)と厳密等価演算子(===)
私がもう一つ新鮮に感じたことが、この等価演算子と厳密等価演算子の存在です。
コード内では==
と===
で表されますね。
等価演算子は見たこともありました。しかし、厳密等価演算子に関しては初見でした。
初心者丸出しの第一印象は「間違って一個多めに打ちこんじゃったのかな」です。
なぜわざわざ等価演算子と厳密等価演算子の二つが用意されているのだろうと疑問に思い、二つの違いについて調べたところ、またもや新鮮な事実に行き当たりました。
ここで等価演算子と厳密等価演算子の使用例を一つ挙げさせてもらいます。
var num = 1;
console.log(num == 1); // true
console.log(num === 1); // true
console.log(num == true); // true
console.log(num === true); // false
num == 1
がtrue
なのはわかります。num == true
もtrue
?
自分が等価演算子と思っているものと、JavaScript の等価演算子は違うみたいですね。
どっちかというと、厳密等価演算子がそれに当たるのかな?
JavaScript における等価演算子は比較する際に、同じ型になるように暗黙的な型変換が行われるようです。
そのため上の例では、num == true
はtrue
が暗黙的に数値型へ変換されたためにnum == 1
と同じ形になってしまったのですね。
今までと同じ感覚で等価演算子を使ってしまうと、意図しない結果を出力してしまう可能性もありますね…。気を付けないと。
**追記:**コメントの方でご指摘を頂いたのですが、どうやらC言語にもstdbool.hというbool型を同じ振る舞いで使用できるライブラリが存在するみたいです。勉強不足ですね…。
ここでの例が結果的にあまりよろしくないものとなってしまったのですが、
「ぱっと見の型は違うのに等価判定でtrueと出ることが少し不思議に感じた」
というニュアンスが伝わってくだされば幸いです。
(また、非常に丁寧な解説をコメントの方で頂いているので、参考例としてはそちらのほうが良いと思われます!)
終わりに
JavaScript に慣れるのはもう少し先になりそうです。
慣れないといけないこと、知らないといけないこともまだまだ多いみたいなので、
少しずつでも着実に知識を増やしていって、できることのレパートリーを増やしていきたいですね。
追記: 2の10乗をどういうわけか256と書いてしまっていたので修正しました。