「JavaScript/変数」の版間の差分
削除された内容 追加された内容
→変数の宣言方法の全体像: const も要素の変更は妨げられない。複合オブジェクトの代入は別名を作り出す。 |
const に関する記述を移動。また変数がメモリ管理に関与しているやの記述を修正。 |
||
58 行
{{code|const}} キーワードで定数を宣言する事が出来ます。JavaScriptにおける「定数」とは、その名の通り、値の変更を許さない変数のことです。(「定数」を「変数」の特殊なものに分類するのは、数学的には違和感を感じる人もいるかもしれないが、プログラミングでは便宜上、このように分類する。プログラミングでいう「変数」とは、単に値を格納するもの、という意味である。数学でいう、値の変動する代数とは、プログラミング「変数」は意味が異なることに、読者は留意してもらいたい。)
<syntaxhighlight lang="javascript">▼
const x = 12;▼
const y = x * 2; // 初期化には既知の値のみで組み立てられた式が使える▼
x = 1; // SyntaxError: Identifier 'x' has already been declared▼
</syntaxhighlight>▼
const は定数を宣言しますが、Array(配列)オブジェクトや Object(連想配列)オブジェクトのように、複合的なオブジェクトの要素の変更は妨げません。▼
<syntaxhighlight lang="javascript" line>▼
const ary1 = [1,2,3];▼
const ary2 = ary1;▼
ary2[1] = "abc";▼
console.log(ary); // 1,abc,3▼
</syntaxhighlight>▼
* 3行目で定数な筈のaryの要素を書き換えています(ary1を書き換えるのは出来ませんが要素は可能)。▼
* 3行目で変更したのは ary2 の1番めの要素なのに、4行目で表示するとary1の要素が書き換わっています。▼
** これは、2行目でary2をary1で初期化しているためで、この時 ary2 は ary1 の別名になっています。▼
== 変数の自動判定 ==
126 ⟶ 109行目:
なお、文字列型で宣言された数字の変数を、同じ内容の数値型に置き換える
たとえば、数値計算をするには、たとえば整数どうしの計算に置き換えたいなら、下記のように <code> parseInt( )</code> を使い、
<syntaxhighlight lang="
var suuji = "2";
var kazu = 3;
document.write( parseInt(suuji) + kazu ); // 数値計算 2+3 の結果の「5」を表示
</syntaxhighlight>
<!--
148 ⟶ 129行目:
のように書きます。これなら、文字列型で宣言された「2」を数値に置き換えるので、足し算 2+3 の結果の「5」が表示されます。
次のように複数の変数をまとめて宣言することもできます。
208 ⟶ 187行目:
{{コラム|JavaScriptの数値の型|
C言語の数値変数には、整数型(int)や浮動小数型(float)などといった型があります。しかし JavaScript の数
== 変数名 ==
243 ⟶ 218行目:
== 定数 ==
定数(ていすう)は<code>const</code>キーワードで宣言します。
数学において、定数(ていすう)とは、変動しないで、同じまま値のことです。
JavaScriptにおける定数は、宣言と同時に代入しなければならず、値は変更できません。
286 ⟶ 259行目:
定数名は全大文字で、<code>const CONSTANT_VALUES_LIKE_THIS</code>のようにスネークケースで書く慣習があります。
constと宣言された定数への代入は SyntaxError を throw します。
▲<syntaxhighlight lang="javascript">
▲const x = 12;
▲const y = x * 2; // 初期化には既知の値のみで組み立てられた式が使える
▲x = 1; // SyntaxError: Identifier 'x' has already been declared
▲</syntaxhighlight>
▲<syntaxhighlight lang="javascript" line>
▲const ary1 = [1,2,3];
▲const ary2 = ary1;
▲ary2[1] = "abc";
▲console.log(ary); // 1,abc,3
▲</syntaxhighlight>
▲* 3行目で定数な筈のaryの要素を書き換えています(ary1を書き換えるのは出来ませんが要素は可能)。
▲* 3行目で変更したのは ary2 の1番めの要素なのに、4行目で表示するとary1の要素が書き換わっています。
▲** これは、2行目でary2をary1で初期化しているためで、この時 ary2 は ary1 の別名になっています。
== 変数のスコープ ==
398 ⟶ 389行目:
<syntaxhighlight lang="JavaScript">
// 1 秒間隔で 0, 1, 2 と出力したい
// for の次が var i = 0 でなく let i = 0 に変わっている
for (let i = 0; i < 3; i++) { // ECMA2015なのでアロー関数によるラムダ式を使った
setTimeout(
}
// -- 実際の出力は「012」となり、成功。
</syntaxhighlight>
なお、ECMAScript 5以前はletキーワードが無かったので、上述の問題を解決するには次のように
<syntaxhighlight lang="JavaScript">
for (var i = 0; i < 3; i++) (function(i) {
setTimeout(function() {
422 ⟶ 408行目:
}, 1000);
})(i);
</syntaxhighlight>
|