JavaScriptの「const」の使い方
困った人(ピクトグラム)(左)

JavaScriptの「const」の使い方が分からない…

今回はこんな疑問にお答えします。

本記事の内容
  • 「const」について
  • 「const」の使い方について
  • 「const」・「var」・「let」の違いについて
  • 「const」の変数のみの宣言について
  • 「const」の再宣言について
  • 「const」の再代入について
  • 「const」のスコープについて
  • 「const」は使わない方がいいのか?
  • こんにちは。
    現役プログラマーのnktatです!

    今回は『JavaScriptの「const」の使い方』について解説していきます。

    JavaScriptに限った話ではないですが、どのプログラミング言語でも変数というのは必ず使います。
    JavaScriptでは変数を宣言するキーワードが「const」・「var」・「let」の3つありますが、用途に合わせて使えていますか?
    JavaScriptで変数を宣言するときに何となく「const」を使っていませんか?

    ここでは「const」の特徴や使い方について説明します。
    変数を宣言するときには「const」・「var」・「let」を用途に合わせて使えるようになりましょう。

    そもそもJavaScriptって何?と思われている方はこちらの記事にまとめていますので、まずはこちらの記事を参考にしてみてくださいね!

    それでは解説していきます。

    「const」について

    検索ボックス、はてな(M)

    「const」の使い方を説明する前に、「const」とは何なのか?「const」とはどういう意味なのか?から説明します。

    「const」とは?

    「const」とは、JavaScriptで定数の変数を宣言するときに使うキーワードの一つです。
    「定数の変数を宣言するとき」に使いますが、実際は読み取り専用の値を生成するためのもので、不変の値を保証するものではないので注意が必要です。

    以前は「var」を使って変数を宣言するのが一般的でしたが、ECMAScript 2015から変数を宣言するキーワードに新しく「const」と「let」が追加されました。
    「var」と「let」との違いについては後ほど説明します。

    「const」の意味とは?

    「const」は「constant」の略語です。
    「constant」とは「定数」と言う意味で、「const」と記述するのは「定数の変数」と宣言していることになります。

    「const」の使い方について

    デジタルツール(s)

    JavaScriptの「const」は一つ、または複数の変数を宣言するときに使います。
    それぞれの変数の宣言の仕方を見ていきましょう。

    「一つの変数を宣言する」使い方

    JavaScriptの「const」で一つの変数を宣言する使い方です。

    構文:constで一つの変数を宣言

    const 変数名 = 値;

    サンプルコード

    // 「変数:fruits」を宣言して、「値:リンゴ」を代入
    const fruits = "リンゴ";
    console.log(fruits); // 「リンゴ」で表示される

    実行結果

    リンゴ

    『変数:fruits』を宣言して、”リンゴ”を表示させました。

    「複数の変数を宣言する」使い方

    JavaScriptの「const」で複数の変数を宣言する使い方です。

    構文:constで複数の変数を宣言

    const 変数名1 = 値1, 変数名2 = 値2, 変数名3 = 値3, …, 変数名N = 値N;

    変数と値のペアを「,(カンマ)」で区切ることで、複数の変数を宣言できます。

    サンプルコード

    // 「変数:fruits1」に「値:リンゴ」を代入し、「変数:fruits2」に「値:バナナ」を代入
    const fruits1 = "リンゴ", fruits2 = "バナナ";
    console.log(fruits1); // 「リンゴ」で表示される
    console.log(fruits2); // 「バナナ」で表示される

    実行結果

    リンゴ
    バナナ

    「const」・「var」・「let」の違いについて

    「const」・「var」・「let」の違い

    JavaScriptで変数を宣言するキーワードは「const」の他にも、「var」と「let」があります。
    それぞれの違いを表にまとめました。

    ■「const」・「var」・「let」の違い
    const var let
    変数のみの宣言 ×
    再宣言 × ×
    再代入 ×
    グローバルスコープの適用
    関数スコープ(function)の適用
    ブロックスコープ({})の適用 ×

    「const」は「変数のみの宣言」も「再宣言」も「再代入」もできないのが特徴です。
    それぞれの「const」の特徴を説明します。

    「var」の使い方や問題点についてはこちらの記事にまとめていますのでぜひチェックしてみてください。 「let」の特徴や使い方についてはこちらの記事にまとめていますのでぜひチェックしてみてください。

    「const」の変数のみの宣言について

    「const」の変数のみの宣言

    「const」は変数のみの宣言ができません。

    「conost」で変数宣言時に、値を代入しなかった場合は、エラーになります。

    サンプルコード

    // 「変数:fruits」のみ宣言する。値は何も代入しない。
    const fruits; // エラー(SyntaxError)になる

    実行結果

    SyntaxError: Missing initializer in const declaration

    「const」の再宣言について

    「const」の再宣言

    「const」は再宣言できません。
    再宣言とは、一度宣言した変数名で再度宣言することです。

    サンプルコード

    // 「変数:fruits」を宣言して、「値:リンゴ」を代入
    const fruits = "リンゴ";
    
    // 「変数:fruits」を再宣言
    const fruits; // 「変数:fruits」を再宣言するとエラー(SyntaxError)になる

    実行結果

    SyntaxError: Identifier 'fruits' has already been declared

    「const」は同一スコープ内で再宣言できないので、『変数:fruits』を同一スコープ内で複数回宣言すると「SyntaxError」となります。

    「const」の再代入について

    「const」の再代入

    「const」は再代入できません。
    再代入とは、値が入っている変数に上書きで代入することです。

    サンプルコード

    // 「変数:fruits」を宣言して、「値:リンゴ」を代入
    const fruits = "リンゴ";
    console.log(fruits); // 「リンゴ」が表示される
    
    // 「変数:fruits」に「値:バナナ」を代入
    fruits = "バナナ"; // 「変数:fruits」に値を再代入するとエラー(TypeError)になる

    実行結果

    Uncaught TypeError TypeError: Assignment to constant variable.

    「const」は再代入できないので、『変数:fruits』の値を上書きしようとするとエラー(TypeError)になります。

    「const」のスコープについて

    「const」のスコープ

    スコープとは、変数の名前や関数などの参照できる範囲を決めるものです。
    スコープの中で定義された変数はスコープの内側でのみ参照でき、スコープの外側からは参照できません。

    それでは「const」とスコープの関係性について説明します。

    グローバルスコープの適用について

    「const」で宣言する変数はグローバルスコープを適用できます。

    サンプルコード

    // グローバルスコープについて確認する
    const scope = "グローバルスコープ値"; // グローバル変数
    console.log(scope); // 「グローバルスコープ値」で表示される
    
    (function(){
        console.log(scope); // 「グローバルスコープ値」で表示される
    })()
    
    if(true){
    	console.log(scope); // 「グローバルスコープ値」で表示される
    }
    
    console.log(scope); // 「グローバルスコープ値」で表示される

    実行結果

    グローバルスコープ値
    グローバルスコープ値
    グローバルスコープ値
    グローバルスコープ値

    すべて”グローバルスコープ値”で表示されました。
    「const」で宣言した変数はグローバルスコープを適用できるので、プログラムのトップレベルで「const」で宣言された変数はグローバル変数となり、プログラム全体のどこからでも参照できます。

    関数スコープ(function)の適用について

    「const」で宣言する変数は関数スコープ(function)を適用できます。

    サンプルコード

    const scope = "グローバルスコープ値"; // グローバル変数
    console.log(scope); // 「グローバルスコープ値」で表示される
    
    function test(prm){
        const scope = "関数スコープ値"; // 関数スコープ(function)が適用されるので、ローカル変数
        console.log(scope); // 「関数スコープ値」で表示される
    }
    
    test("")
    
    if(true){
    	console.log(scope); // 「グローバルスコープ値」で表示される
    }
    
    console.log(scope); // 「グローバルスコープ値」で表示される

    実行結果

    グローバルスコープ値
    関数スコープ値
    グローバルスコープ値
    グローバルスコープ値

    test関数の中のみ”関数スコープ値”で表示されました。
    「const」で宣言した変数は関数スコープ(function)を適用できるので、関数内の「const」で宣言した変数はローカル変数となり、関数の内側のみ利用可能です。

    ブロックスコープ({})の適用について

    「const」で宣言する変数はブロックスコープ({})を適用できます。

    サンプルコード

    const scope = "グローバルスコープ値"; // グローバル変数
    console.log(scope); // 「グローバルスコープ値」で表示される
    
    if(true){
        const scope = "ブロックスコープ値"; // ブロックスコープ({})が適用されるので、ローカル変数
        console.log(scope); // 「ブロックスコープ値」で表示される
    }
    
    (function(){
        console.log(scope); // 「グローバルスコープ値」で表示される
    })()
    
    console.log(scope); // 「グローバルスコープ値」で表示される

    実行結果

    グローバルスコープ値
    ブロックスコープ値
    グローバルスコープ値
    グローバルスコープ値

    if文の中のみ”ブロックスコープ値”で表示されました。
    「const」で宣言した変数はブロックスコープ({})を適用できるので、ブロック内の「const」で宣言した変数はローカル変数となり、ブロックの内側のみ利用可能です。

    「const」は使わない方がいいのか?

    ?青(M)

    ここまで「const」の特徴を説明しました。
    変数を宣言するキーワードは「const」の他にも、「var」と「let」がありますが、どれを使えばいいのでしょうか?

    結論:「var」よりも「let」や「const」を使うことが推奨されている

    結論から言うと、「var」よりも「let」や「const」を使うことが推奨されています。

    ECMAScript 2015で、変数を宣言するキーワードに新しく「let」と「const」が追加されました。
    「var」にはいくつか使いづらい点があったからです。
    使いづらい点により、「var」は意図せず変数を上書きしてしまう危険性がありました。

    「var」の挙動自体を変更しなかったのは、今までに「var」で開発されたアプリケーションが動かなくなるリスクがあったため、新しく「let」と「const」を追加して影響がないように対応しました。

    「let」と「const」の追加が必要な事態を招いた、「var」の使いづらい点についてはこちらの記事にまとめていますのでぜひチェックしてみてください。 「let」の特徴や使い方についてはこちらの記事にまとめていますのでぜひチェックしてみてください。

    まとめ

    まとめ(M)

    今回は『JavaScriptの「const」の使い方』について解説しました。
    これまでの情報のおさらいです。

    本記事の要約
    • 「const」とは、JavaScriptで変数を宣言するときに使うキーワードの一つ
    • 「const」は「constant」の略語で、「定数」という意味
    • 基本的な構文は「const 変数名 = 値;」
    • 変数を宣言するキーワードは他にも「var」と「let」がある
    • 「const」の特徴について
      1. 変数のみ宣言できない
      2. 再宣言できない
      3. 再代入できない
      4. グローバルスコープ・関数スコープ・ブロックブロックで適用できる
    • 「var」は意図しない変数の上書きによるエラーが発生する可能性があるため、「let」や「const」を使うことが推奨されている
    • 基本的には「const」を使い、値の再代入が必要な場合は「let」を使う。そうすれば意図せず変数を上書く可能性は低くなる

    JavaScriptの「const」の使い方は理解できましたか?
    「var」の使いづらい点を改善するために追加された「let」や「const」ですが、使い方を理解したうえで、状況に応じて使い分けるようにしましょう。


    あなたは独学でJavaScriptを学んでいて、嫌になったことはありませんか?

    独学で進める場合、分からない部分があれば、
    自分で調べる⇒解決方法を見つけて解説を読む⇒解説の中で分からない部分を調べる⇒調べた結果で分からない部分をまた調べる…
    という調査ループに陥ってしまい、嫌気が差して挫折することがよくあります。

    「プログラミングを学ぶ」と一言でいってもコードを記述するだけではありません。
    コード記述前は環境構築を行い、コード記述後はテストが必要です。
    エラーが発生したら、エラーの原因を調査して自分で解決しなければいけません。

    環境構築やエラー発生時の調査方法など、プログラミングを学び始めたときに躓いてしまうポイントは多岐に渡って潜んでいます。

    独学で進める場合、これらの問題に対してインターネットや書籍から自分で調べて自分で解決していくしかありません。

    独学でプログラミングを学んだことがある人ならば一度は経験していると思いますが、自分で調べて自分で解決することは非常に難しく、とても根気がいる作業です。

    そのため、独学によるプログラム学習は挫折率が高く、ほとんどの学習者が一度は躓きや挫折を経験しています。

    仮に根気強く頑張って一通りのプログラミングを学んだとしても、独学ではチーム作業を学ぶことができません。

    プログラミングはシステムを開発するために行うことがほとんどですが、システム開発はチーム作業が主です。

    チーム作業を学べないというのは大きなデメリットになります。

    これらのことを踏まえて考えると、独学でJavaScriptを学ぶことは本当に効率的でしょうか?

    JavaScriptを学ぶ理由は「エンジニアになりたい」・「転職したい」・「副業したい」など人それぞれだと思います。

    前向きな目標を達成するために自主的に学んだのに、挫折して諦めてしまうのは非常に勿体ないですよね。

    人生は一度きりです。
    やりたいことをやったほうがいいに決まっています。

    では、挫折せずに効率よくJavaScriptを学ぶにはどうしたらいいのでしょうか?

    結論から言うと、挫折せずに効率よくJavaScriptを学ぶ方法は「Code Village」を受講することです。

    「Code Village」は必要な教材・教育・サポートが揃っており、受講生の学習継続率も93%と非常に高いスクールです。
    挫折せずに効率よくJavaScriptを学ぶには「Code Village」を受講することをオススメします。

    「Code Village」の口コミを一部紹介します。

    20代男性 職種:公務員 5.0
    男性のシルエット

    自走力が身に付くスクールです。基本的にはスクールのオンライン教材を見て学習し、実際に手を動かしながら理解を深めていくというやり方で行います。なのでHTML/CSS、JavaScriptにも少し触れておくことをお勧めします。自分のタイミングで好きな時に好きなだけ学習できます。強制されることはありません。私は6か月在籍していましたが教材の種類が豊富だったおかげで自分の学びたいことを好きなだけ学習することができました。まだ学習できていない教材もありますが卒業後も教材をみられるようなので卒業した今でもそこで学習しています。このスクールにはスタディールームというオンラインルームがあり、質問や疑問があればそこで講師の方に質問したり、エラーを見せてどの部分に問題があるのか聞くことができます。(聞きすぎてしまうと自走力がつかないと思うのでどうしても自分自身では解決できないときにのみ利用したほうが良いと思います。)講師の方はわかりやすく丁寧にどこに問題があるのか教えてくれます。また定期的に学習の進捗状況を共有したりするメンターと呼ばれる方が1人ついてくれるのですがその方にスクールのお勧めの教材などを聞くことができるので効率的に学習することができます。とにかく自由度が高いスクールで自分で考えて学習したい。効率的に学習したい。好きな時に学習したい。という方にすごくマッチしたスクールだと感じました。

    20代男性 職種:公務員 5.0
    男性のシルエット

    入校する前はもうちょっと基礎を固めてから入った方がいいんじゃないかと躊躇していましたが悩んでいても仕方がないと思い入校しました。 入ってみるとやはり難しかったものの、 講師の方が一から丁寧に教えて下さり、一人でやっている時よりも得るものも多く覚えるスピードも早かったです。 また、もくもく会で受講生と話しているとみなさん目標に向かって頑張っていて、とても刺激になり、より頑張ろうと思えました。 決して安くない金額ですが入ってよかったなと思っています。 もし迷っている方がいらっしゃったら仮入校制度もあるので気軽に入ってみるのもいいと思います!

    20代女性 職種:パート 5.0
    女性のシルエット

    こちらのスクールを受講してよかったと感じています。フロントエンドエンジニアとして今現在使用されている言語を中心に学ぶことができ、バックエンドに関する最低限の知識なども教材の中に盛り込まれていた点が良かったです。また、教材内容と期間に対する価格が他者さんに比べていい点も、スクールの決め手となりました。

    ここでは一部のみの紹介となりましたが、以下の記事で総勢32人の受講生のリアルな口コミを紹介しています。

    更には、なぜ「Code Village」で受講すべきなのか?「Code Village」を利用するまでの3ステップなども記事にまとめていますのでぜひチェックしてみてください。

    今なら全コース1週間無料体験実施中!!「Code Village」についての詳細はこちらをチェック!!