どうも!chuckです。引き続きJavaScriptGoodPartsを読んでいきます。
本日は第2章「文法」を見ていきます。
第二章 文法
2.1 ホワイトスペース
(まさか空白から説明してくれるとは…!)
ホワイトスペースは主にコードを見やすくするために使う。なので、あらゆる場合において省略可能である。(たしかにminifyファイルとかぎっしりと詰まってるもんね!)
ただし1点だけ例外があり、varによる変数宣言ではホワイトスペースが必須である。
var name = "chuck"; は、var name="chuck";とはできるけど、varname="chuck";とはできない。
JavaScriptでは2種類のコメントがある。// で表される行コメントと /* */で表されるブロックコメントである。ただし、ブロックコメントは正規表現リテラルと衝突する恐れがあり安全とは言えない。
/*
var rm_a = /a*/.match(s)/;
*/
これはシンタックスエラーになってしまう。
(ほんとだ!知らなかった)
2.2 名前
「名前」は1文字もしくはそれ以上のアルファベット、数字、そしてアンダースコアで構成された文字列。ただし予約語は不可。
ただし、残念ながら予約語のほとんどはJavaScriptの仕様で使われていない。さらにundefined,NaN,Infinityは、予約語になってるべきなのになっていない。
名前は命令文、変数、引数、プロパティ名、演算子、ラベルとして利用できる。(ラベルってなんだ)
2.3 数値
JavaScriptにはデータ型としての数値が1つしかない。それはJavaにおけるdouble型である。独立した整数型は持っていない。なので、1と1.0は等しくなる。(文系的にはそりゃあ等しいよねと思う。理解しやすい)
実際、他の言語でありがちな数値型に起因するエラーがなくなり、数値を扱いやすくなっている。eをつけることで指数を表せるし、マイナスをつけることで負の数を表わせる。また、NaNはどの値とも等しくならない(NaN自身とも!)。
数値型はメソッドを持ち、Mathオブジェクトを利用すれば数値処理メソッドを使える。(Math.floorとか、Math.randomだよね!)
2.4 文字列
文字列リテラルは、シングルクォート、ダブルクォートで囲まれた0個以上の文字のこと。すべての文字は16ビット。1文字だけを含むためのchar型はない。
文字列はlengthプロパティを持ち、文字列の長さを保持している。また、文字列はイミュータブルであり、変更不可になっている。ただし+で連結することは可。
2.5 命令文
命令文:if, try, switch, while, for, do
順序破壊文:break, return, continue
ブロック:{ }
などなど。
ただし、他の言語とは違い、JavaScriptのブロックはスコープを生成しない。
if文でfalseになるのは次の通り。false, null, undefined, 空文字列, 数値の0, 数値のNaN
return文を使うことで、関数の途中で呼び出し元に処理を戻すことができる。もしreturn文に式が指定されていなければ戻り値はundefinedになる。そして、returnと式の間に改行は入れられない。
break文を使うときにラベルを指定すると、ラベルまで戻ることができる。(JavaScriptにラベルなんてあったんだ!使ったこと無いし、使わない方がいいような気がする…笑)
2.6 式
演算子の優先度は以下のとおり、
1 : . [ ] ( ) (詳細化と関数呼び出し)
2 : delete new typeof + - !(単項演算子)
3 : * / % > (乗算、除算、剰余算)
4 : + - (加算、減算)
5 : >= <= < > (不等号)
6 : === !== (等号)
7 : && (論理値)
8 : | | (論理値)
9 : ?: (三項演算子)
typeof を利用すると、number, string, boolean, undefined, function, objectのいづれかを得られる(データ型のチェック)
ただし、nullはobjectを返してしまう。これは仕様上のミス。
関数を呼び出すときの丸括弧を、呼び出し演算子というらしい(知らなかった)
test( );
これは関数オブジェクトを実行する。
まとめ
2章おわりました。言語の基本的な部分をおさらいできたと思います。次章からはより詳細な説明に入っていくらしいので、気合を入れて臨みます!