「JavaScript/変数」の版間の差分

削除された内容 追加された内容
編集の要約なし
Ef3 (トーク | 投稿記録)
→‎const: Fix bug
タグ: 2017年版ソースエディター
103 行
== const ==
<code>const</code>キーワードで変数を宣言すると、その値は初期化の時以外は書き換えられず「定数」として振る舞います。
:<syntaxhighlight lang="javascript">
const E; // SyntaxError: Missing initializer in const declaration
</syntaxhighlight>
110 行
定数はスコープの全域で使われる不変な値に対して用いられスコープの冒頭で宣言されるのが典型的な使われ方です。
 
:<syntaxhighlight lang="javascript">
const E = 3;
 
117 行
</syntaxhighlight>
 
''';const の定数的でない例''':<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
const obj = { a: 1, b: 2};
 
131 ⟶ 130行目:
 
constと宣言された定数への代入は SyntaxError を throw します。
:<syntaxhighlight lang="javascript">
const x = 12;
const y = x * 2; // 初期化には既知の値のみで組み立てられた式が使える
138 ⟶ 137行目:
 
<code>const</code> は定数を宣言しますが、Arrayオブジェクトや Objectオブジェクトのような複合的なオブジェクト(コレクション)の要素の変更は妨げません。<!--混乱するのでObject.seal() メソッドやObject.freeze()メソッドには触れなかった。-->
:<syntaxhighlight lang="javascript" line>
const ary1 = [1,2,3];
const ary2 = ary1;
ary2[1] = "abc";
console.log(aryary1); // 1,abc,3
</syntaxhighlight>
# 変数 <var>ary1</var> 配列インスタンスで初期化
# 変数 <var>ary2</var> <var>ary1</var> を初期化したインスタンスで初期化
# 定数な筈のary <var>ary2</var> の要素を書換え(ary1を初期化した(<var>ary2</var> が参照するインスタンスの要素換え)。
# 書き換えたのは <var>ary2</var> の1番めの要素なのに、<var>ary1</var> の要素が書き換わっている。これは、2行目で<var>ary2</var> <var>ary1</var> で初期化しているためで、この時 <var>ary2</var><var>ary1</var> の別名になっています。
 
{{コラム|JavaScriptにおける「定数」とは値の変更を代入が許さない変数のこと|
「定数」を「変数」の特殊なものに分類するのは、数学的には違和感を感じる人もいるかもしれないがプログラミングでは便宜上このように分類します。
 
プログラミングでいう「変数」とは、データオブジェクト値をつけた名前をつけるものという意味で、数学でいう値の変動する代数とはプログラミング「変数」は意味が異なることに気をつけて下さい。
}}