Water Sunlight

軽量プログラミングの文法 - JavaScript/Python

ユーザ用ツール

サイト用ツール


js:basic:variable

文書の過去の版を表示しています。


JavaScript 型と変数

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には以下の プリミティブ型 が存在します。

  • Number — 整数または浮動小数点数
  • BigInt — 長整数(任意の精度を表現できる整数)
  • String — 文字列
  • Boolean — 真偽値(trueまたはfalse)
  • Symbol*2015 — シンボル型
  • Null — null値(空)のみを持つ型
  • Undefined — undefined値(未定義)のみを持つ型

また、以下の 構造型 と呼ばれる型が存在します。

  • Object — newキーワードで生成されるインスタンスのための型
  • Function — 非データ構造である関数のための型

これら以外に、データ値を集合として表現する 配列(Array)と呼ばれる構文が存在します。配列はオブジェクト型の一種ですが、本章では便宜的にデータ型として扱います。

本章ではこれらのデータ型のうち プリミティブ型について説明し、構造型については他の章に譲ることにします。

詳しくはMDNの以下の項を参照してください。


数値型 Number

JavaScriptの数値型は整数と浮動小数点数を区別しません。具体的にはIEEE754で定義された倍精度浮動小数点数を表します。

整数リテラル

0
123       // 先頭が0以外は10進数
0377      // 先頭が0の場合は8進数
0xCAFE91  // 先頭が0xの場合は16進数 

浮動小数点リテラル

3.14      // 小数点を含む数値
6.02e+23  // 指数部分を含む数値

Numberオブジェクト

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

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


文字列型 String

リテラル:

  • 'Singleクォート'
  • “Doubleクォート”
  • `Backクォート`*2015 ・・・ テンプレート文字列(複数行、変数展開 ${変数名} )

エスケープシーケンス:\n, \r, \t, \xXX(Latin-1), \uXXXX(Unicode 4桁), \u{XXXXX}(Unicode 4桁より大)

真偽値 Boolean

オブジェクト Object ・・・ 連想配列

リテラル:{x:1, y:'foo', …} 値の型は任意 ※JSON形式に同じ
アクセス:data.x(オブジェクト形式) または data['x'](連想配列形式)

関数 Function

配列 Array ・・・ 添字配列

リテラル:['foo','bar', ・・・ ] 値の型は任意
アクセス:data[0], data[0][1]

ヌル Null

  • 空を表現する

未定義 Undefined

  • 値が未保存
  • 未定義のプロパティ
  • 戻り値のない関数の参照
js/basic/variable.1631505491.txt.gz · 最終更新: 2021/09/13 12:58 by tanaka