変数(Variable)
変数とは、変数名とデータのセットを指します。変数名を宣言することでデータを格納できるようにします。
多くのプログラミングにおいては、数値を扱うのか、文字列を扱うのか、画像や音声などのデータを扱うのかによってデータ型を宣言する必要があります。
JavaScriptでは、データの型宣言が必要ありません。初期値などの値によって自動で変数の型を判別して変数が生成されます。以下は変数の宣言の例です。
var value = "abcdef";
変数について
変数とは、プログラミングをする上で基礎となる知識です。
数値や文字列といったデータを素早く読み出せるように変数名
にデータの場所を関連付けしておきます(変数にデータを格納すると表現されます)。
変数とは変数名とデータのセットを指します。変数名を宣言し、その変数名とデータを関連付けることが必要になります。
var number = 100;
JavaScriptにおける変数の扱い
JavaScriptでは、基本的にすべてのデータはオブジェクトとして扱います。そのため、変数として宣言するとそのインスタンスが生成されます。
var string = 'abcd'; var number = 100;
以下は同じことを意味しています。
var string = new Object( 'abcd' ); // String 型 var number = new Object( 100 ); // Number 型
詳しくはプリミティブ型とオブジェクト型
を参照してください。
修飾子 var、let、const
JavaScriptでは、var、let、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 連想配列名={};
var は修飾子といいます。変数の性質を設定するもので、他に let、const があります。詳しくは以下の修飾子 var、let、const
を参照してください。
変数の型
JavaScriptでは、以下のような変数の型が存在します。
- プリミティブ型あり
- Boolean 真偽値(trueとfalseのリテラル)
- Number 数値
- String 文字列
- null 値が存在しない(nullリテラル)
- undefined 未定義の値
- Symbol 一意な値
- オブジェクト型
- Array 配列
- Object オブジェクト、連想配列
- RegExp 正規表現
- Date 日付
- Function 関数
- Iterator 順序付け
プリミティブ型とオブジェクト型
多くのプログラム言語では、データ型にプリミティブ型とオブジェクト型の2つがあります。
プリミティブ型とは昔からある基本的なデータ型、オブジェクト型との対比としてプリミティブ型と呼ばれます。プリミティブ型はプロパティやメソッドを持ちません。
JavaScriptでは、プリミティブ型としてBoolean、Number、Stringがありますが、それぞれをオブジェクトとして作成することもできます。
同じデータ型であっても、プリミティブ型のデータと、オブジェクト型のデータという2つの扱いがあります。
var str = "abc"; // 真偽値はプリミティブ型の値として扱われる var bool_pri = Boolean(str); alert(bool_pri); // true alert(typeof bool_pri); // "boolean" // boolean型のオブジェクトを作成(インスタンスの作成) var bool_obj = new Boolean(str); alert(bool_obj); // true alert(bool_obj); // "object" ... var obj_str = new String("abc"); alert(typeof str); // "string" alert(typeof obj_str); // "object"
プリミティブ型で宣言した変数は、オブジェクト型にあるプロパティやメソッドが使えません。!
と思うときがあるかもしれません。
Boolean、 Number、 String、 null、 undefined のリテラル
プログラムの実行時にメモリを消費する存在をリテラルといいます。
プログラムの実行時に、例えば "string" や 1.23 などといった文字列や数値はメモリを消費します。
文字列や定数値といった直接表記されるものもメモリを消費しますし、変数に代入されるような値もメモリを消費します。それらはリテラルと表現されます。
Boolean、 Number、 String、 null、 undefined のリテラルには以下のものがあります。
変数型 | リテラル |
---|---|
Boolean | true、false |
Number | 整数、浮動小数点 |
String | 文字列、”(ダブルコーテーション)、'(シングルコーテーション)、`(バッククォート) |
null | null |
undefined | undefinedが入っている |
null 、undefined は値としては存在してない
という意味です。しかし、null 、undefined 値として存在しメモリを消費しています。null 、undefined もまたリテラルとして扱われます。
エラー
エラーを作成することができます。作成できるエラーは以下です。
型付き配列コンストラクタ
メモリを予約するコンストラクタのようです。?
- ArrayBuffer
- Float32Array
- Float64Array
- Int16Array
- Int32Array
- Int8Array
- Uint16Array
- Uint32Array
- Uint8Array
- Uint8ClampedArray
型の判定
- ===
- typeof
===
nullなどの判別には速い。
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