TypeScriptに入門したいのでJavaScriptに入門してみる(文と式)
続: JavaScript入門
教材は
文と式
JavaScriptは文と式で成り立つ。
式は評価すると値を得ることができ、この値のことを評価値と呼ぶ。
文は処理の一部として式を含むことがある。
式文
式は文になることができる。文となった式のことを式文と呼ぶ。
条件分岐
if, else if, else
省略
switch文
switch は言語によって結構差がある部分なので一応メモする。
C言語などと同じですね。breakを忘れるとその下のcaseの内容も実行される。
ループと反復処理
while, do-while, for
C言語と同じ。省略。
配列の forEach メソッド
他の言語と似てるが、メソッド名が forEach (Eが大文字) ですね。
実例
break
省略
配列の some メソッド
some メソッドは配列の各要素に対して何か処理をしたい場合に使えるメソッドで、処理内容をコールバック関数で渡すことができる。
以下は配列に偶数が含まれているか判定をする例。
continue
省略
配列の filter メソッド
配列から特定の値だけを集めた新しい配列を作るには filter メソッドを利用できる。
for…in文(基本的に使わない方がよい)
for…in文はオブジェクトのプロパティに対して 順不同で 反復処理を行います。
for…in 文の問題
JavaScriptのオブジェクトは何らかのオブジェクトを継承している。
対象となるオブジェクトのプロパティを列挙する場合、親オブジェクトまで列挙可能なものがあるかを探索して列挙する。そのため、オブジェクト自身が持っていないプロパティも列挙されてしまい、意図しない結果になる場合がある。
安全にオブジェクトのプロパティを列挙するには Object.keys メソッド、 Object.values メソッド、 Object.entries メソッドがなどが利用できる。
for…in 文は配列に対しても利用できるが、こちらにも問題がある。
このように、配列の要素がnumに代入されるのではなく、配列のプロパティ名(ここでは要素のインデックス"0"や"1")がnumに代入されてしまう。
配列の要素に対して何かしらの処理を行う場合、 for文または forEachメソッド、もしくは後述の for…of 文を使うべき。
[ES2015] for…of 文
JavaScriptでは Symbol.iterator という特別な名前のメソッドを実装したオブジェクトを iterable と呼び、iterableオブジェクトは for…of 文で反復処理できる。
iterableオブジェクトは反復処理時に次に返す値を定義する。それに対してfor…of文では iterable から値を1つ取り出し、variable に大入試反復処理を行う。
Arrayもiterableオブジェクトなので、以下のように配列の要素を取り出すことができる。
Stringオブジェクトもiterableなので、文字を1つずつ取り出すことができる。他にも TypedArray, Map, Setなど Symbol.iterator が実装されているオブジェクトは多数あるので、for…of文はそれらの iteratable オブジェクトを扱うことができる。
reduce メソッド
reduceメソッドを使った例では、そもそも変数宣言をする必要がない。