本文へスキップ
totonoe.tech

プログラミング言語を整える

中級

JavaScript を整える。

= 「1」+ 1 が "11" になる——実行して初めて分かる間違いを、ブラウザ内で安全に試す

JavaScript が初めての方は、先に そもそも JavaScript とは・どんな場面で使うか をどうぞ。

サンプルコード(クリックでエディタに挿入)

JAVASCRIPT EDITOR QuickJS 0.31.0 (WASM)

OUTPUT

JavaScript コードを書いて「実行」を押すと、ここに console 出力と最後の式の値が出ます。

そもそも JavaScript とは

ブラウザの中で動く、Web ページに「動き」を付ける言語。

JavaScript は、Web ページを動かすためのプログラミング言語です。ボタンを押したら表示が変わる、入力欄をその場でチェックする、といった動きの多くはこの言語で書かれています。ブラウザには JavaScript を動かす仕組みが最初から入っているので、特別な準備なしにすぐ試せます。1995年に Brendan Eich 氏がブラウザ用に作ったのが始まりです。

名前は似ていますが、Java とは別の言語です。もともとブラウザの中の言語でしたが、今ではサーバー側で動かす Node.js などもあり、画面もサーバーも同じ言語で書けます。TypeScript は JavaScript に型の仕組みを足したもので、JavaScript の知識がそのまま土台になります。

どこで・どんな場面で使うか

  • Web ページに動きを付けるとき

    メニューの開閉、フォームの入力チェック、画面の一部だけの更新など、ブラウザ上の動きを作ります。

  • Web アプリを作るとき

    React や Vue といった画面づくりの道具は、どれも JavaScript(または TypeScript)で書きます。

  • サーバー側の処理を書くとき

    Node.js を使うと、API やバッチ処理も JavaScript で書けます。

  • ブラウザ上のゲームやツール

    特別なソフトを入れなくても動くので、手軽なゲームや計算ツールに向いています。

  • 求人・仕事での位置づけ

    Web 系の開発では、フロントエンドを中心に幅広い求人で名前が出てくる基本の言語です。

なぜ覚えておくと得か

  • ブラウザさえあれば始められる。インストール不要で、書いたらすぐ結果が見えます。初めてのプログラミングにも向いています。
  • Web の仕事の土台になる。画面側の開発では避けて通れず、TypeScript や各種の道具を学ぶ際の前提にもなります。
  • 画面もサーバーもつなげて考えられる。同じ言語で両方を書けるので、Web サービス全体の流れをつかみやすくなります。

上の練習場でサンプルを選んで実行し、書いたコードの結果がその場で変わる感覚を確かめてみてください。

JavaScript は「実行するまで」間違いが分からない。

型注釈が無いので、書いた瞬間には何もエラーが出ません。上のサンプルボタン ②〜⑤ が、その代表例です。

  • ②

    変数と型 — 暗黙の型変換

    "1" + 1 は文字列連結になり "11"。 でも "1" - 1 は数値に変換されて 0。演算子によって挙動が変わることは、実行して初めて確認できます。

  • ③

    存在しないプロパティ — 「undefined」が静かに広がる

    タイプミスしたプロパティ名は、エラーにならず 「undefined」 を返すだけ。そのまま計算やテンプレートに混ざり、さらにそれを掘り下げようとした瞬間に TypeError が起きます。

  • ④

    引数の数の違い — 足りない分は「undefined」

    関数に渡す引数が足りなくても呼び出しエラーにはならず、足りない仮引数は 「undefined」 になって処理が進みます。呼び出し側の個数チェックは実行時にはありません。

  • ⑤

    null の扱い — typeof null は "object"

    typeof null は仕様上のバグで "object" になります。null のプロパティに触れると、その場で例外が発生します。

JavaScript と TypeScript の違い

上の4つの間違いは、TypeScript で書くと「実行する前」「書いた時点」で赤い波線として指摘されます。

観点 JavaScript TypeScript
型の指定 無い(実行時に値を見て決まる) 書ける(: string 等の型注釈)
間違いに気づく時点 実行した時(その行を通ったとき) 書いた時(エディタ上で赤い波線)
実行の仕組み そのまま実行される 型注釈を取り除いた JavaScript に変換してから実行(変換自体は実行時に何も足さない)
学習コスト 低い(すぐ書き始められる) やや高い(型の書き方を覚える分)
向いている場面 小さなスクリプト・すぐ試したいコード 複数人・長期運用するコード(間違いを早期発見したい場面)

同じサンプルコードを TypeScript で書くとどうなるか、 /typescript/ の Playground で確認できます。同じ間違いが「実行する前」に赤くなる様子を見比べてみてください。

このページについて

ここで動くのは QuickJS(WASM) で動く練習用の素の JavaScript です。 ブラウザ本体のエンジンではなく別のエンジンで動かしているため、DOM・fetch・setTimeout は使えません。 無限ループを書いても一定時間で処理を打ち切るので、ページが固まることはありません。

🌐 このページを開いただけでは外部通信は発生しませんが、「実行」を押した最初の1回だけ、 JavaScript の実行環境(QuickJS 0.31.0)を配信元の cdn.jsdelivr.net から取得します(初回のみ約1MB)。 これはプログラムを受け取るだけの通信で、あなたが書いたコードや実行結果が送られることはありません。 ただし通信である以上、配信元にはお使いの回線の IP アドレスが見えます。 「入力は端末から出さない」という当サイトの原則に関わる点なので、隠さずに書いておきます。 送信ゼロ(書いたコードと実行結果はどこにも送信されません)。

このツールについて

JavaScript には型注釈がありません。だから間違いの多くは「書いた時点」ではなく「実行した時点」で初めて分かります。ここではその感覚を、実際に手を動かして体験できます。

ブラウザ内 QuickJS(WASM) で JavaScript を実行。「1」+ 1 = "11"、存在しないプロパティ、引数不足、null の扱いなど「実行して初めて分かる間違い」を体験。同じ題材を TypeScript で書いた /typescript/ と見比べられます。

主な機能

  • 7サンプル(Hello World・変数と型・存在しないプロパティ・引数の数違い・null の扱い・配列 map/filter/reduce・クラス)
  • 「実行するまで分からない」を4題材で解説・JS と TS の違い表
  • /typescript/ の同じ題材ページへの導線
  • console 出力・最後の式の値・エラー・所要時間を表示、無限ループは2秒で停止
  • CodeMirror 6 シンタックスハイライト・Ctrl/⌘+Enter で実行
  • DOM・fetch・setTimeout は無い練習用の素の JavaScript・処理系は cdn.jsdelivr.net から初回のみ・送信ゼロ

よくある質問

Q. 入力した JavaScript コードはサーバーに送られますか?

A. 送られません。実行環境(QuickJS・WASM)がブラウザ内に読み込まれ、コードの実行も出力もすべて端末内で完結します。外へ出る通信は実行環境のダウンロードだけです。

Q. なぜ「1」+ 1 が "11" になるのですか?

A. JavaScript の + 演算子は、片方が文字列なら「連結」として扱う仕様だからです。数値の足し算のつもりで書いたコードが、文字列が混ざった瞬間に挙動を変えます。実行するまで気づけない典型例です。

Q. DOM 操作や fetch は使えますか?

A. 使えません。ここで動くのはブラウザ本体のエンジンではなく、練習用に独立させた QuickJS(WASM)です。ページの見た目を変えたり外部と通信したりする機能は、送信ゼロを保つために持たせていません。

Q. 無限ループを書いたらどうなりますか?

A. 2秒で処理を打ち切り、「制限時間で停止しました」と表示します。ブラウザのタブが固まることはありません。

Q. JavaScript と TypeScript の違いを知りたい場合は?

A. 同じ4つの間違い(型・プロパティ・引数・null)を TypeScript で書いた /typescript/ で試せます。TypeScript では同じコードが実行前の型検査で指摘される様子を見比べられます。

入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。

続けて整える

totonoe.tech を運営する株式会社Koinobori は、法人向けの研修サービス「NOBORIBA®」も運営しています。 ここで手を動かした内容を、講師から教わる形の研修です。このページの道具は無料のまま、登録もいりません。

運営サイト

私たちが運営するサイト