JavaScriptで「こいつ...できる...のか??」と思わせる方法

  • 8
    いいね
  • 0
    コメント

元ネタ

黙ってstrictを黙らす

"use strict";

書きません。いらないからです。

ECMAScrip 2015からモジュールの概念が追加されました。モジュールのコードは常に厳格モードになります(Module code is always strict mode code.)。モジュールであれば、"use strict;"を書く必要はありません

では、どういうときにモジュール扱いになり、常に厳格モードになるのでしょうか?

  1. Babelでes2015またはそれを含むenv等のpresetを使うとき。(厳密には、strict-modeプラグインが厳格モードにするのですが、es2015に含まれるes2015-modules-commonjsプラグインによって常にモジュール扱いとしています。)
  2. <script type="modlue">type属性にmoduleを指定したとき。(2017年6月10日現在、リリース済みブラウザでそのまま動作するのは最新のSafariのみです)

scriptタグはEdge、Firefox(開発版)、Chrome(開発版)共に実装は終わっており、デフォルト有効化しての正式リリースを待つだけの状態ですが、通常は使用できません。ですので、Babelの場合がほとんどになります。

モダンブラウザのECMAScript 2015対応がかなり進んだとはいえ、importexportなどのモジュール機能は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 of [...Array(array.length).keys()]) {
  console.log(`${i}: ${array[i]}`);
}

ドキュメンテーションコメントを書かな・・・書く!

・・・ (どうやら、うまい返しを考えているようだ)

・・・・・・ (TypeScriptも元ネタで言及されていて、ネタがないようだ)

・・・・・・・・・ (・・・)

ドキュメンテーションコメントを書きましょう! (諦めたようだ)