はじめに
オライリー社の「ハンズオンJavaScript」を読みながら、気づいたことや、重要と思われるポイントをメモしていきます。
また、出版から5年ほど経っているので、古くなってしまったり、動かなくなった内容があれば、指摘していきます。
今回は、第2章は、「データを学ぶ」です。
データの型を1つ1つ取り上げるのではなく、他言語と比較した時に異なる点、重要だと思った点を中心に取り上げていきます。
NullとUndefined
JavaScriptのデータの大きな特徴の1つと、Undefined型があります。それとは別にNull型もあります。
Nullは、オブジェクトが存在しないことを示すものですが、Undefinedは未定義、初期化されていないことを示します。
他のプログラミング言語では、どちらもNullで扱うことが多いですね。
本書では、何か処理を行った結果、無効になったことを示したい場合は、undefinedではなくnullを使う(戻り値として返すなど)方法を推奨していました。
ちなみに、型名では大文字始まりですが、値として扱うときは小文字始まりになります。
Symbol型
一意の値を示します。シングルトンですね。JavaScriptにはEnum型がないので、その代わりにSymbol型があるそうです。ただ、私はこれを使ったことがなく、本書でも、一般の開発者が自分で作ることはほぼないと記載されていました。
以下のように生成できます。
Symbol("abc")
Enum型はないですが、「enum」は予約語で変数名としては使えないようです。
const
2015年ごろのECMAScript6で登場した定数の概念ですね。
これがない頃にJavaScriptを書くのは辛かった・・・![]()
falseと解釈される値
false, 0, ""(空文字)、null、undefinedは、ifの判定などではfalse扱いになります。
bashやC言語の終了ステータスだと、0が正常終了を示すコードなので、時々混乱しますね・・。
==と===
JavaScriptでは、比較の時にイコールが2つのものと3つのものがあります。
2つのものは、抽象的な等価演算子と呼ばれ、数値に変換した上で比較されます。
なので、「1 == true」は、真になります。
3つのものは、厳密な等価演算子と呼ばれ、型が同じかどうかも含めて比較します。
なので、「1 === true」は、偽になります。
特別な事情がない限りは、3つのものを使いましょう。
文字列リテラルとテンプレート
ダブルクォーテーション、シングルクォーテーションのどちらでも表すことができます。
ただしバッククォート(`)を利用すると、テンプレートとして、中に変数や数式を記載できます。表示時には展開されます。
> let day = 3
> `今日は${day}日です`
今日は3日です
スプレッド構文(...)
配列の各要素を展開できます。
> let a = [3, 4, 5]
> [1, 2, ...a]
[1, 2, 3, 4, 5]
Flutterで使われているDartという言語でも同じことはできますね。
プロパティの値の取得方法
3つの方法があります。
> let param = {a: 1, b : "bbb", c:[1, 2]}
ドット記法(推奨)
> param.a
1
ブラケット記法
> param["a"]
1
オプショナルチェーン演算子
> param?.a
1
paramがundefinedでなければaにアクセスします。undefinedならaにアクセスせず、undefinedと出力します。
paramというプロパティが存在することが明らかならば、ドット記法を使うことが一般的のようです。
in
あるオブジェクトに対して、プロパティの有無を確認する方法です。
> "a" in param
true
> "d" in param
false