黙ってstrictを黙らす
"use strict";
を書きません。いらないからです。
ECMAScript 2015からモジュールの概念が追加されました。モジュールのコードは常に厳格モードになります(Module code is always strict mode code.)。モジュールであれば、"use strict;"
を書く必要はありません。
では、どういうときにモジュール扱いになり、常に厳格モードになるのでしょうか?
- Babelでes2015またはそれを含むenv等のpresetを使うとき。(厳密には、strict-modeプラグインが厳格モードにするのですが、es2015に含まれるes2015-modules-commonjsプラグインによって常にモジュール扱いとしています。)
-
<script type="module">
とtype
属性にmodule
を指定したとき。(2017年6月10日現在、リリース済みブラウザでそのまま動作するのは最新のSafariのみです)
scriptタグはEdge、Firefox(開発版)、Chrome(開発版)共に実装は終わっており、デフォルト有効化しての正式リリースを待つだけの状態ですが、通常は使用できません。ですので、Babelの場合がほとんどになります。
モダンブラウザのECMAScript 2015対応がかなり進んだとはいえ、import
やexport
などのモジュール機能はSafariを除いて対応していません。ましてや、ECMAScript 2016以降の新機能になると対応は完全ではありません。もっとも、IE11対応を捨てられなければ、ECMAScript 2015をそのまま動かすなど夢もまた夢の話です。
ということで、既にBabelを使うことは必須事項であり、既に使用しているはずです。その状態であれば、すでにモジュールとして作成している可能性が高い、いや、モジュールとして作成しない理由がありません。なので、初めから厳格モードになっており、わざわざ書く必要はありません。
なお、class
構文内も自動的に厳格モードになります。
もう「let」なんて言わない
変数宣言はconst
のみで必要十分です。再代入は邪道です。関数型プログラミングをマスターした諸君であれば、ここで大きく頷いてくれるはずです。
なお、var
は初めから存在しません。
for (;;) はもう飽きたろう?
とりあえずfor..ofにしておきましょう
const array = [1, 2, 3];
for (const x of array) {
console.log(x);
}
ループ処理の定番パターンですね。インデックス番号が欲しいって?
const array = [1, 2, 3];
for (const [i, val] of array.entries()) {
console.log(`${i}: ${val}`);
}
ドキュメンテーションコメントを書かな・・・書く!
・・・ (どうやら、うまい返しを考えているようだ)
・・・・・・ (TypeScriptも元ネタで言及されていて、ネタがないようだ)
・・・・・・・・・ (・・・)
ドキュメンテーションコメントを書きましょう! (諦めたようだ)