JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptには定数がある?constの基本と使い方をわかりやすく解説

はい、JavaScriptにも定数が存在します。ES6(ECMAScript 2015)以降では、const宣言を使うことで定数を定義できます。constで宣言された変数は読み取り専用の参照となり、値を後から変更したり、再度宣言し直したりすることはできません。

constによる定数の基本的な書き方

定数を宣言するには、次のようにconstキーワードを使用します。

const MY_CONSTANT = "some-value";

この例では、MY_CONSTANTという名前の定数に文字列「some-value」が代入されています。一度宣言したら、この値を上書きすることはできません。

constの主な特徴:ブロックスコープ

constを使うと、関数スコープではなくブロックスコープを持つローカル変数を宣言できます。つまり、{ }で囲まれたブロック内でのみ有効な変数となります。これは従来のvarとの大きな違いの一つです。

定数への再代入はできない

定数として宣言された変数に新しい値を代入しようとすると、エラーが発生します。以下のコードを見てみましょう。

// 'a' を定数として宣言
const a = 150;

// 'a' は定数なので、新しい値を代入するとエラーになる
a = 0;   // TypeError: Assignment to constant variable.
a++;     // こちらもエラー

// 同じスコープ内で var を使って再宣言することもできない
var a = 0; // SyntaxError

このように、aを定数として宣言した後は、値の再代入もインクリメントも、さらにはvarによる再宣言もすべて失敗します。

constを使う際の注意点

  • 宣言と同時に初期化が必要: constは宣言時に必ず値を代入する必要があります。
  • オブジェクトや配列の中身は変更可能: constで宣言しても、オブジェクトや配列の場合はその中身(プロパティや要素)の変更は可能です。禁止されるのは「変数への再代入」だけです。
const obj = { name: "太郎" };
obj.name = "花子";      // OK:プロパティの変更は可能
obj.age = 25;          // OK:プロパティの追加も可能
// obj = {};           // NG:変数自体の再代入はエラー

値を一切変更されたくない場合は、Object.freeze()を組み合わせる方法もあります。

まとめ

JavaScriptではconstを使うことで簡単に定数を定義でき、誤って値を上書きするバグを防ぐことができます。特に設定値や固定の文字列など、変更されるべきではない値にはconstを使用するのがベストプラクティスです。再代入の必要がない変数は、積極的にconstで宣言しましょう。

  1. JavaScriptのconstとletの違いを徹底解説!ブロックスコープ変数の基本と使い方

    JavaScriptにおけるconstとletの基本const と let は、ES2015(ES6)で導入された変数宣言用のキーワードです。どちらもブロックスコープ(波括弧 { } で囲まれた範囲)に対応しているのが特徴で、関数スコープしか持たなかった従来の var とは異なる挙動を示します。両者の大きな違いは再代入の可否です。letで宣言した変数は後から何度でも値を再代入できますが、constで宣言した変数は再代入しようとするとエラー(TypeError)が発生します。letとconstの主な違い項目letconst再代入可能不可(エラー発生)スコープブロックスコープブロックスコープ宣言時

  2. JavaScriptのPromiseとは?非同期処理の基本をわかりやすく解説

    JavaScriptのPromiseとは?Promise(プロミス)は、JavaScriptで非同期処理を扱うためのオブジェクトです。Promiseが生成された時点では、最終的な結果の値はまだ確定していません。処理が完了した将来のタイミングで、成功または失敗の結果を受け取ることができます。これにより、APIからのデータ取得やファイル読み込みなど、時間のかかる処理を効率的に記述できます。Promiseの3つの状態Promiseは、必ず以下の3つの状態のいずれかを持ちます。pending(待機):初期状態。処理がまだ完了していない状態です。fulfilled(履行):処理が正常に完了し、結果の値が