基本型とリテラル
JavaScriptで定義されている基本的なデータ型とリテラル表現について解説します。
プリミティブ (primitive)な型
JavaScriptではメソッドを持たない基本的なデータ型として、 7種類のデータ型が定義されています。 (nullは正確にはobject型です)
型 | 意味 | 説明 | 値、リテラルの例 |
---|---|---|---|
undefined | 未定義 | 値が未定義 | undefined |
null | null値 | 参照が存在しないか無効 | null |
boolean | 真偽値 | 条件分岐等で使われる真偽値 | true , false |
number | 数値 | 整数または浮動小数 | 1 , 1.2 |
bigint | 長整数 | 任意精度の整数 | 123456789n |
string | 文字列 | 連続した文字 | ‘Hello’ , “123” |
symbol | シンボル | 一意のインスタンス | Symbol(‘Sym’) |
プリミティブ型は変更できません(イミュータブル immutable)。 変数に新しい値として代入することはできますが、 例えば1という数字で示される値そのものの変更は行えません。
リテラルの表現
プリミティブ型、および、その他型の値は、コード中に直接記載して表現する事ができます。
未定義
let a = undefined;
NULL値
let a = null;
真偽値
let a = true;
let b = false;
数値
16進数は先頭に0x、8進数は先頭に0,2進数は先頭に0bを付与します。
console.log(0x0, 0x1, 0xFF, -0x10); // 16進数 0, 1, 255, -16
console.log(0, 1, -1, 100, 1.2); // 10進数 0, 1, -1, 100, 1.2
console.log(00, 07, 010, -077); // 8進数 0, 7, 8, -63
console.log(0o0, 0o7, 0o10, -0o77); // 8進数 0, 7, 8, -63
console.log(0b0, 0b1, 0b0011 , -0b11); // 2進数 0, 1, 3, -3
長整数
console.log(0x123456789ABCDEFn); // 16進数 81985529216486895n
console.log(123456789n); // 10進数 123456789n
console.log(0b101n); // 2進数 5n
浮動小数点
console.log(1.0, -1.1, -1.2E+5, .023e-5); // 1, -1.1, -120000, 2.3e-7
文字列
let a = 'Hello';
let b = "123";
let c = `test ${a} ${b}`;
let d = `AAA
BBBB
CCC`;
let e = 'a"b\rc\r\nd\te\\fg'
シンボル
let a = Symbol()
let b = Symbol(123)
let c = Symbol('Hello')
配列(Array)
角括弧[]
を使って配列を作成できます。
角括弧の中に配列の要素をカンマ,
で区切って列挙して表現します。
let a = [1, 2, 3, ];
let b = ['a', 'b', 'c', ];
末尾のカンマは省略できます。
オブジェクト(Object)
let a = {};
let b = { fullName:'Taro', age:40, name : { fist : 'taro', last : 'yamada' } };
let c = { ['prop'+'1'] : 1 , [((n)=> 'prop_' + n )(2)] : 2 } ; //{prop1: 1, prop_2: 2}
正規表現
let r = /a*b+c/;
console.log(r.test("abc")); // true
console.log(r.test("abbbc")); // true
プリミティブ型(primitive)のラッパーオブジェクト
JavaScriptにはプリミティブ型を値として持つラッパーオブジェクトが用意されています。
プリミティブの値についてメソッドの呼び出しやプロパティの参照を行うと、 プリミティブのラッパーオブジェクトのメソッドやプロパティの呼び出しが行われます。
String 文字列
let primitive = 'abc'; // primitive
let wrapper1 = String('abc'); // primitive
let wrapper2 = new String('abc'); // wrapper object
console.log(typeof primitive); // string
console.log(typeof wrapper1); // string
console.log(typeof wrapper2); // object
console.log(primitive == wrapper1); // true
console.log(primitive === wrapper1); // true
console.log(primitive == wrapper2); // true
console.log(primitive === wrapper2); //false
console.log(primitive === wrapper1.valueOf()); // true
console.log(primitive === wrapper2.valueOf()); // true
Number 数値
let primitive = 123; // primitive
let wrapper1 = Number(123); // primitive
let wrapper2 = new Number(123); // wrapper object
console.log(typeof primitive); // number
console.log(typeof wrapper1); // number
console.log(typeof wrapper2); // object
console.log(primitive == wrapper1); // true
console.log(primitive === wrapper1); // true
console.log(primitive == wrapper2); // true
console.log(primitive === wrapper2); //false
console.log(primitive === wrapper1.valueOf()); // true
console.log(primitive === wrapper2.valueOf()); // true
BigInt 巨大整数
let primitive = 123n; // primitive
let wrapper1 = BigInt(123n); // primitive
console.log(typeof primitive); // bigint
console.log(typeof wrapper1); // bigint
console.log(primitive == wrapper1); // true
console.log(primitive === wrapper1); // true
console.log(primitive === wrapper1.valueOf()); // true
Boolean 真偽値
let primitive = true // primitive
let wrapper1 = Boolean(true); // primitive
let wrapper2 = new Boolean(true); // wrapper object
console.log(typeof primitive); // boolean
console.log(typeof wrapper1); // boolean
console.log(typeof wrapper2); // object
console.log(primitive == wrapper1); // true
console.log(primitive === wrapper1); // true
console.log(primitive == wrapper2); // true
console.log(primitive === wrapper2); //false
console.log(primitive === wrapper1.valueOf()); // true
console.log(primitive === wrapper2.valueOf()); // true