LoginSignup
41

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-06-09

元ネタ

黙ってstrictを黙らす

"use strict";

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

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

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

  1. Babelでes2015またはそれを含むenv等のpresetを使うとき。(厳密には、strict-modeプラグインが厳格モードにするのですが、es2015に含まれるes2015-modules-commonjsプラグインによって常にモジュール扱いとしています。)
  2. <script type="module">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, val] of array.entries()) {
  console.log(`${i}: ${val}`);
}

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

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

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

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

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41