昨日書いた Javascript.infoJavaScript の基礎の部分の一人読書会を実践した。

2.1 Hello, world!

<script>...</script> だけで良い。 今どきは type 属性を使わない。

<script type="text/javascript"><!--
    ...
//--></script>

のような JavaScript をサポートしないブラウザのためのコメントアウトも非常にレガシーなので使わない。

2.2 コード構造

下記のようなコードは想定通り機能しないので避ける:

alert("There will be an error")
[1, 2].forEach(alert)

JavaScript は角括弧 [...] の前にはセミコロンを想定しないため alert() の戻り値への配列添字アクセスのように解釈されてしまう。 こういった不測の事態を避けるためセミコロンを省略せずに常に付与するのが望ましい。

ショートカットキー Ctrl + / で 1 行コメントアウト、Ctrl + Shift + / で複数行コメントアウトができる。

2.3 モダンなモード, "use strict"

IDE が警告出してくれていたので使っていなかった、というより忘れていたが、使おう。

2.4 変数

定数 const は小文字キャメルケースのもの (いわゆる不変な参照) と大文字スネークケースの従来の定数を混在させて良い。 定数か不変な参照かどうかは下記のように実行時に変化するかをみるのがよい:

const BIRTHDAY = '18.04.1982';  // 定数
const age = someCode(BIRTHDAY);  // 不変な参照

2.5 データ型

Infinity (無限大) という定数が定義されているのは初めて知った。 BigInt も初めて知ったが、おそらく使う機会は無いだろう。

2.8 演算子

以下のように数値変換に + 演算子が使える:

let apples = "2";
let oranges = "3";

// 二項演算子プラスの処理の前に両方の値が数値に変換されます
alert(+apples + +oranges);  // 5

似たような考え方だが - 演算子でゼロを引いてもいいので、いつも apples - 0 + (oranges - 0) のようにしていた。

カンマ演算子の存在は改めて書かれるとなるほどと思った。 確かに for 文で使われる:

// 1 行に 3 つの演算子
for (a = 1, b = 3, c = a * b; a < 10; a++) {
 ...
}