変数(Variable)
変数とは、変数名とデータ(値)のセットを指します。変数名だけでも変数と呼んだりします。
let value = "abcdef";
データを設定しなくても、以下のように変数名だけを宣言することでデータを格納できるようになります。初期値は undefined になります。
let value;
変数名は正確には識別子
といいます。識別子には変数名、定数名、関数名などが含まれます。
多くのプログラミングにおいては、数値を扱うのか、文字列を扱うのか、画像や音声などのデータを扱うのかによってデータ型を宣言する必要があります。
JavaScriptでは、データの型宣言が必要ありません。初期値などの値によって自動で変数の型を判別して変数が生成されます。
変数について
変数とは、プログラミングをする上で基礎となる知識です。
変数とは、変数名とデータ(値)のセットを指します。変数名を宣言し、その変数名とデータを関連付けることが必要になります。
let number = 100;
上記の例のように、変数にデータを格納します。データを代入されている意味では変数名だけでも変数と呼んだりします。
以下のように値を指定しない場合は undefiled に自動で設定されます。
let val_example; // undefined に設定される
変数は定数の他にオブジェクトや関数を扱うことができます。
let example_date = new Date(); // Date オブジェクトに設定される
オブジェクトについて詳しくはオブジェクト
、クラス定義についてはクラス
ページを参照してください
関数として宣言するには function(){...} または ()=>{...} を使用します。
let example_func = function(){ ... }
関数について詳しくはfunctionステートメント(サブルーチン、プロシージャ)
ページを参照してください
変数名の前にある var、let、const は変数のスコープを明確に宣言するものです。
var、let、const
JavaScript では、var、let、const を使い変数を宣言することができます。これらは変数のスコープを明確にする働きがあります。
let は同名の宣言があるとエラーなり、デバグがし易くなります。変数宣言には let を使うようにした方が賢明でしょう。var ステートメントは同名の変数が使われてもエラーが発生しませんでしたので規模が大きくなるとデバグし難くなります。
グローバル変数などで初期値を変えたくない場合は const を利用するとよいでしょう。const は同じ変数名(識別子)で再宣言できません。
より詳しく解説すると以下のようになります。
var
は JavaScript 特有の修飾子で、変数を宣言するものですが変数のタイプや値を自由に変えることができます。
let
は変数の型を変えることができません。途中で型が変わっていないを知ることができ、デバグがし易くなります。
const
は初期値の変更ができません。グローバル変数に利用できます。
var、let、const は、変数の性質を設定するためのもので機能は以下です。
初期値 | 再代入 | 再宣言 | |
---|---|---|---|
var | ◯ | ◯ | ◯ |
let | ◯ | ◯ | ー |
const | ◯ | ー | ー |
初期値は変数宣言と同時に値を設定します。
var _variable = 0; (let...◯、const...◯)
再代入は初期値の変更です。
_variable = 100; (let...◯、const...×)
再宣言は同名変数で再宣言できるかです。以下は変数の型を暗黙に変更しようとしています。
var _variable = 'foo'; (let...×、const...×)
var、let、const は修飾子にもみえますが、スコープに関するものでデータ型を宣言するものではありません。
var
var はどこでも宣言することができ、変数とみなされたところで var になります。
console.log( test ); var test = "example"; console.log( test );
この例の実行結果は以下のようになります。
> undefined > example
最初の test は後でvar test
で宣言することで変数であるというふうに JavaScript では識別されます。
これは JavaScript における変数宣言の特徴で、var で宣言された変数はそれより以前で使用しても変数として識別されます。
しかし、これはプログラムが大規模になるほどデバグが難しくなります。なるべく let または const を使用した方がよいでしょう。
変数の宣言
変数を宣言するには、以下のように記述します。
let 変数名;
ただし、予約語と呼ばれるワードは、変数名として使えません。
JavaScriptでは、基本的にすべてのデータはオブジェクトとして扱われます。そのため、変数として宣言するとそのインスタンスが生成されます。
let string = 'abcd'; let number = 100;
以下は同じことを意味しています。
let string = new Object( 'abcd' ); // String 型 let number = new Object( 100 ); // Number 型
JavaScript では、配列や連想配列(オブジェクト)を変数として宣言することができます。
let 配列名=[];
let 連想配列名={};
配列や連想配列(オブジェクト)は、変数として宣言してから使用した方がよいでしょう。
識別子 変数名の規則
変数名を正確には識別子
といいます。
識別子
は変数名やオブジェクト名、関数名のことを示します。変数名で扱える文字や形式といった規則は識別子
の規則として紹介されています。
識別子には以下の規則があります。
- 予約語は使用できない
- 一文字目は半角の [ a-zA-Z ] のように Unicode の ID_Start 属性を満たす文字、
$
,_
を使用することができる。数値は使えない - 2文字目以降は半角の [ a-zA-Z ] 、数値[ 0-9 ]、
$
,_
を使用することができる。
ここでは識別子
のことを変数名として解説していますが、正確には識別子( identifier )
と呼ばれます。もしも変数名について調べる際には識別子
についても調べてみてください。
リテラル
コンピューター用語にリテラル( literal )があります。
プログララミングの概念では、プログラムの実行時にメモリを消費する存在をリテラルといいます。しかし、ここではリテラルとは定数値を表していると表現します。
let number = 100;
この例では 100 という定数値がリテラルと言えます。整数リテラルなどとも呼ばれます。
数値の他に文字列、オブジェクト、関数も定数として認識されるものであればリテラルに含まれます。
let str_example = '定数であれば文字列もリテラル';
変数は、変数名にリテラル値が代入されるという言い方もできます。
オブジェクト指向のプログラミング言語では、リテラルはすべてオブジェクトとして扱うことが多く、JavaScript ではリテラル値はすべてオブジェクトとして扱います。
オブジェクト指向のプログラミング言語では、以前から存在する論理値(Boolean)、数値(Number)、文字列(String)といった変数とオブジェクトや関数を示す変数を分けて考えます。
論理値(Boolean)、数値(Number)、文字列(String)であるリテラル値をプリミティブ型、オブジェクトや関数をオブジェクト型などといいます。
null、undefined
特殊なリテラル値として null、undefined があります。
特殊な値 | 概要 |
---|---|
null | 値が存在しない(nullリテラル) |
undefined | 未定義の値 |
NaN | 数値ではない |
null は値がないまたは存在していないということを示すためのリテラル値です。
nullは未設定値として使用することができます。
let val_example;
val_example = null; // 未設定値になる
undefined 未定義を表す値です。初期値を指定していない場合に自動で設定されます。
通常は利用することがなく、未設定値を表すには null を使用します。
NaN は数値ではないことを示す特殊な数値です。
変数の型
JavaScript では、オブジェクト指向以前からある論理値(Boolean)、数値(Number)、文字列(String)、一意な値(Symbol)であるリテラル値をプリミティブ型、オブジェクトや関数をオブジェクト型などといいます。
プリミティブ型はひとつの値のみで、オブジェクトのように複数の値や関数をもたないという特徴があります。
JavaScript のリテラル値の型を示します。
リテラルの型 | 概要 |
---|---|
プリミティブ | |
Boolean | 真偽値(true、false) |
Number | 数値。JavaScript では整数、浮動小数点型といった扱いに違いはない。すべて同じ数値として扱うことができる |
String | 文字列。”(ダブルコーテーション)、'(シングルコーテーション)、`(バッククォート)で囲まれたもの |
Symbol | 一意な識別子 |
オブジェクト | |
Array | 配列 |
Object | オブジェクト、連想配列 |
RegExp | 正規表現 |
Date | 日付 |
Function | 関数 |
Iterator | 順序付け |
JavaScript ではこれらのリテラル値を変数名に割り当てることで変数を宣言します。
オブジェクト指向以前のプログラミング言語では変数を宣言する際にデータの型もあわせて設定しなければなりませんでした。
int count; // int 型の宣言 char text_[7] = 'abcdef'; // 文字列型の宣言
JavaScript ではリテラル値によって自動で何のデータを扱う変数かを判別し変数の型を自動で設定します。
let string_ = 'abcd'; // String 型 let number_ = 100; // Number 型 let array_ = []; // 配列型 let object_ = {}; // オブジェクト型
割り当てる変数が Boolean か、Number かオブジェクトかといった判別は自動で行われるのです。そのために型宣言がありません。
C言語といったオブジェクト指向以前のプログラミング言語をご存知の方はプリミティブとオブジェクトの違いが理解できると思います。
Python や JavaScript といったオブジェクト指向プログラミングから憶えた方はそのような違いがあるといった感じでしょうか。
プリミティブか否かでエラーが出ることがあるので覚えておいた方がよいでしょう。
Boolean 型
Boolean オブジェクトは true と false といった論理値を扱うためのオブジェクトです。true と false に文字列表現「 " 」ダブルクォートや「 ' 」シングルクォートは必要ないです。
var bool_ = true;
上記のように、右辺で true または false が宣言されると値が bool_ に代入されます。右辺のリテラル値によって Boolean オブジェクトが生成されます。
論理演算子 Boolean 特殊で、他にも if() や while() における条件式を評価する際や ===
や >=
といった比較演算子があると Bool 値を返します。
詳しくはBoolean 論理演算子
ページを参照してください。
Number 型
ダブルクォート"
やシングルクォート'
に囲まれていない、数を表す文字列は数値として識別されます。
数値があると、自動で Number 型オブジェクトのリテラル数値として生成されます。代入文があるとそのリテラル値を持つ変数として扱われます。
let a = 10;
詳しくはNumber
ページを参照してください。
数値を文字列に変換するには、.toString()
メソッドを使用します。
String 型
String は文字列型を表します。
JavaScript では、ダブルクォート"
やシングルクォート'
に囲まれたものを文字列として識別されます。
let string_ = 'abcd';
文字列があると自動で String 型のオブジェクトのリテラル文字列として生成されます。代入文があるとそのリテラル文字列を持つ変数として扱われます。
詳しくはString
ページを参照してください。
文字列を表すクォート内で同じクォートを扱う場合はエスケープシーケンス\
を使用します。
例えばダブルクォート"
内でダブルクォートを使用するにはエスケープシーケンス\
を以下のように使用します。
"例えばダブルクォート\"内でダブルクォートを使用するにはエスケープシーケンス\を使用します。"
文字列中に変数を入れる方法に${}
を使用する方法があります。
Symbol 型
一意な識別子を宣言する。オブジェクトやクラスのプロパティ名やメソッド名に使用する。
JavaScript のライブラリ開発者の利便性のある機能。プロパティ名やメソッド名が衝突しないようにすることができる。
const EXAMPLE = Symbol();
詳しくはSymbol
ページを参照してください。
Array 型(配列)
JavaScript で配列を変数として宣言するには以下のようにします。
let list_ = [];
配列に初期値を与えるには以下のようにします。
let list_ = [ "a", "b", "c", "d", "e" ];
Object 型(連想配列)
JavaScript における連想配列型は Object 型とも呼ばれます。JavaScriptにおいて、オブジェクトの基本になっている型です
var animal = { name :'elephant', food : 'plant' };
連想配列(オブジェクト)については連想配列型( Object )
ページを参照してください。
RegExp 型(正規表現)
JavaScriptにおける正規表現とは、複数の検索条件を1つの文字列として表現するパターンマッチング機能のことです。検索時のパターンマッチングに利用します。
var _text = "abcdefghijk";
var re = /abc/;
console.log( re.test(_text) );
正規表現については正規表現
ページを参照してください。
Date 型(日付)
Function 型(関数)
関数とは、複数の処理をひとつの手続きにしたものです。メソッドとも呼ばれています。関数を利用することで似たような処理を何度も描く必要がなくなります。
function example_(){ ... }
関数についてはfunction ステートメント
ページを参照してください。
Iterator 型(順序付け)
型の判定
型の判定には typeof と instanceof があります。
typeof の方が返り値が以下のように詳細に分れています。
// typeofの型出力 typeof 1 = number typeof 'Hello' = string typeof true = boolean typeof null = object typeof NaN = number typeof undefined = undefined typeof オブジェクト = object typeof 配列 = object typeof 関数 = function
また typeof の方が null などの判別が速いです。
instanceof は、Function も Object も Object として判定しますが、if() といった分岐には利用しやすいです。
let exmple_func = function(){}; console.log( exmple_func instanceof Object ); // true を返す
エラー
エラーを作成することができます。作成できるエラーは以下です。
型付き配列コンストラクタ
メモリを予約するコンストラクタのようです。?