データ型とは、データの種類のことをいいます。
例えば、データが「数値型」であれば四則演算で計算を行うことができますが、「文字列型」の場合は四則演算で計算を行うことができません。
JavaScriptではデータの種類を「プリミティブ(primitive)」と「オブジェクト(object)」の2つに分けられます。
これらのデータ型の値は リテラル といわれていて、変数や定数に格納して使用されます。
プリミティブ(文字列や数値)は「不変(immutable)」という特徴があり、プリミティブのデータ型は次の5種類があります。
下記のようにデータ型により実行できる処理が異なります。
データ型 | 概要 | データの例 |
---|---|---|
数値型(Number) | 整数値や浮動小数点値 | 10, 1.23 |
文字列型(String) | 文字列 | ‘Taro’, ‘123’ |
真偽型(Boolean) | 真と偽のどちらかの値 | true, false |
null | 値がないことを表す特殊な値 | null |
undefined | 値が定義されていないことを表す特殊な値 | undefined |
この「不変」というのは「変数の値を変更できない」という意味ではありません。
下記のサンプルは文字列の中から一部の文字列を切り取っていますが、実行すると切り取り元のデータは変わっていないことが確認できます。
function myfunction() {
var str = '12345';
// 0文字目から3文字を切り出す
var result = str.substr(0, 3);
// 切り出した0文字目から3文字
console.log(result);
// 切り取り元のデータは変更されていない。
console.log(str);
}
123
12345
このように プリミティブ型は置き換える(再代入)することはできますが、値をそのものを変更することはできません。
上記をプリミティブ型の特徴を念頭に置いて、各プリミティブ型の違いを確認していきましょう。
他のプログミング言語(Javaなど)では、変数宣言時に指定したデータ型以外の値を入れることができないものもありますが、
JavaScriptはデータ型については寛容です。
例えば、数値型のデータを格納していた変数に文字列型のデータを代入することも可能です。
数値型は整数や小数以外にも16進数を扱うことができます。
全角数値の場合やカンマが含まれている場合(例:1,000)は数値として扱われないため注意しましょう。
function outputNumber() {
console.log(10); // 10
console.log(1.23); // 1.23
console.log(0xFFFF); // 65535
console.log(1000000000000000000000); // 1E+21
console.log(0.0000001); // 1.0E-6
}
また、数値と数値の間に四則演算子がある場合は計算が行われます。
function calNumber() {
console.log(1 + 1); // 2
console.log(2 - 3); // -1
}
JavaScriptでは文字列型の値を記述する場合はシングルクォーテーション(’)、またはダブルクォーテーション(")で囲います。
どちらを使ってもよいのですが、コーディングをする際はどちらかに統一するとコードが読みやすくなります。
また、シングルクォーテーションまたはダブルクォーテーションを文字列として使用したい場合は、
使用されていないクォーテーションで囲うことになります。
function outputString_1() {
console.log('Hello "Taro"!'); // Hello "Taro"!
console.log("I'm Taro"); // I'm Taro
}
GASで使用できるエスケープシーケンスは下記の通りです。
エスケープシーケンス | 概要 |
---|---|
\n | 改行 |
\r | 復帰 |
\t | タブ |
\\ | バックスラッシュ |
\’ | シングルクォーテーション |
\" | ダブルクォーテーション |
試しに下記のサンプルでエスケープシーケンスを確認してみましょう。
function outputString_2() {
/*
Hello
'GAS'!
*/
console.log('Hello\n\'GAS\'!');
}
+
で結合することができます。+
の左辺と右辺を結合してひとつの文字列しています。function outputString_3() {
console.log('Hello ' + 'GAS'); // Hello GAS
console.log('1' + '2'); // 12
console.log(1 + 2); // 3
}
function outputString_4() {
var age = 50;
var message = '私の年齢は' + age + '歳です。';
console.log(message); // 私の年齢は50歳です。
}
function outputString_5() {
var age = 50;
var message = `私の年齢は${age}歳です。`;
console.log(message); // 私の年齢は50歳です。
}
function outputString_6() {
var age = 50;
var message = `私の年齢は${age + 10}歳です。`;
console.log(message); // 私の年齢は60歳です。
}
真偽型 は、true
とfalse
のいずれかの値で表現する値です。
「正しい(true)または誤り(false)」、「Yes(true)またはNo(No)」といったどちらかの結果のみ扱う場合に使用します。
真偽型は後々登場する条件式で活躍するため覚えておきましょう。
なお、JavaScriptでは次の値は偽(false)とみなされます。
null は値が存在しないことを意味します。
数値の「0」や文字列の「’’」も値が存在しないという意味をしているように思えますが、
厳密には「0」という数値、「’’」という文字列が存在しています。
一方で、nullは本当の意味で値が存在しないこと意味しています。
例えば、文字列型の変数の値がnullの場合は「変数に文字列は入っていない」という意味になります。
文字列型の変数の値が’‘の場合は「変数に空文字(’’)が入っている」という意味になります。
どういうときに使うかといいますと、後々代入する予定の変数を初期化する際に使われることがあります。
これができて何が嬉しいの?と思われると思いますが、後々解説する制御構文でその意味がわかると思います。
var num = null;
undefined は値が未定義であることを意味します。
例えば、下記のサンプルでは変数の宣言後に代入を行っていませんが、この変数のを参照するとundefinedとなっています。
どの変数も宣言して代入するまではundefinedの状態になります。
function outputUndefined() {
var num;
console.log(num); // undefined
}
オブジェクトはプリミティブとは異なり、さまざまな形式や値をを取ることができる柔軟性があるデータです。
そのため、実装者にとって都合のよいオリジナルのデータ型を作ることができます。
JavaScriptにはオブジェクトのデータ型が用意されており、今回は下記の2点を次章以降で紹介します。
データ型 | 概要 | データの例 |
---|---|---|
配列型(Array) | インデックスをキーとするデータの集合体 | [1, 2, 3], [‘太郎’, 20, true] |
オブジェクト型(Object) | プロパティをキーとするデータの集合体 | {name: ‘太郎’, age: 20, isStudent: true} |
また、プリミティブ型の数値と文字列、論理値にはそれぞれオブジェクト型が存在しており、
数値はNumber型、文字列にはString、論理値にはBooleanが対応しています。
それぞれ、対応するプリミティブ型の機能を提供しています。