文書の過去の版を表示しています。
— y2sunlight 2020-10-20
プログラミングに於ける式は、オペレータ(演算子)とオペランド(被演算子)によって構成されています。そして、オペランドは変数、定数とリテラルのいずれかに分類することができます。
変数と定数は使用する前に宣言しなくてはなりません(当然のことですが、リテラルに宣言は不要です)。但し、明示的にStrictモードを宣言しない場合は、非Strictモードとなり変数の宣言は免除されます。尚、非StrictモードはSloppy モードと呼ばれることもあります。
構文
var 変数名 [= 初期値], … ; // ローカルスコープ、2重定義可能 let 変数名 [= 初期値], … ; // ブロックスコープ、2重定義禁止 [ES2015]
宣言で使用する var
命令または let
命令の違いについては、本編のJavaScript 変数のスコープを参照してください。
以下にいくつかの例を示します。
var foo = 1; let bar = 1;
変数が複数ある場合はカンマで区切って、次のように書くことができます。
var foo = 1, bar = 1;
ES2015*2015以降では、定数を宣言するためのconst命令が利用できるようになりました。
const 定数名 = 値, … ; // [ES2015]
const TAX_RATE = 0.1, PI = 3.14;
JavaScriptには以下の プリミティブ型
が存在します。
また、以下の 構造型
と呼ばれる型が存在します。
これら以外に、データ値を集合として表現する 配列
(Array)と呼ばれる構文が存在します。配列はオブジェクト型の一種ですが、本章では便宜的にデータ型として扱います。
本章ではこれらのデータ型のうち プリミティブ型について説明し、構造型については他の章に譲ることにします。
詳しくはMDNの以下の項を参照してください。
JavaScriptの数値型は整数と浮動小数点数を区別しません。具体的にはIEEE754で定義された倍精度浮動小数点数を表します。
整数リテラル
0 123 // 先頭が0以外は10進数 0377 // 先頭が0の場合は8進数 0xCAFE91 // 先頭が0xの場合は16進数
浮動小数点リテラル
3.14 // 小数点を含む数値 6.02e+23 // 指数部分を含む数値
JavaScript では Number 型以外にNumberオブジェクトが存在します。例えば以下の例を見てください。
let n1 = 123; let n2 = new Number(123); console.log(typeof(n1)); // number console.log(typeof(n2)); // object
ここで変数 n1 は number 型ですが、n2 は Number オブジェクトになります。number型の変数にNumberオブジェクトのメソッドを適用すると暗黙的にnumber型からNumberオブジェクトへの変換が行われます。
let n = 1234.56; console.log(n.toLocaleString()); // 1,234.56
この例では、変数 n は number 型ですが toLocaleString() が適用される前に Number オブジェクトへ暗黙的に変換されています。Numberオブジェクトについては本編の「JavaScript Numberオブジェクト」を参照してください。
bigint 型は number 型で表現できる最大の数(Number.MAX_SAFE_INTEGER)より大きな数について信頼性のある表現方法を提供します。
BigInt のリテラルは以下の様に末尾に n をつけて表します。
BigIntのリテラル
123n 3.14n
BigInt の使用例を以下に示します。
let n = Number.MAX_SAFE_INTEGER; console.log(n); // 9007199254740991 console.log(n * 10); // 90071992547409900 console.log(BigInt(n) * 10n); // 90071992547409910n
BigInt() 関数は bigint 型を生成します。この例で分かるように number 型は大きな整数の演算を行うと精度が損なわれますが、bigint 型では精度が保障されます。
bigint 型は number 型と異なり相補的なオブジェクトは存在しません。
let bn = 123n; console.log(typeof(bn)); // bigint
bigint 型は他の型と演算することができません。bitint 型と number 型をまぜて演算したい場合はどちらかの型に明示的に型変換する必要があります。但し、この場合、bigint 型は number 型に型変換すると精度が落ちるのは言うまでもありません。
let bn = 123n; let n = 123; console.log(bn + BigInt(n)); // 246n
リテラル:
エスケープシーケンス:\n, \r, \t, \xXX(Latin-1), \uXXXX(Unicode 4桁), \u{XXXXX}(Unicode 4桁より大)
リテラル:{x:1, y:'foo', …} 値の型は任意 ※JSON形式に同じ
アクセス:data.x(オブジェクト形式) または data['x'](連想配列形式)
リテラル:['foo','bar', ・・・ ] 値の型は任意
アクセス:data[0], data[0][1]