wiki:HowTo/JavaScriptLanguageIntroduction/ValueAndVariable

Version 2 (modified by 村山 俊之, 14 years ago) ( diff )

--

値と変数

値の型

他の多くの言語がそうであるように、 JavaScript にも値のが存在します。

しかし、各言語が作られた目的やフィールドの違いに由来し、型の意味合いも言語毎に大きく異なります。古典的には、型と言えば精度の異なる複数の整数型と実数型を指すものでした。これは CPU が直接に理解できるマシン語の世界観に相当するものですが、この概念自体は古典的な多くの言語においてそのまま踏襲されます。 FORTRAN 然り、 PASCAL 然り、 BASIC 然り、 C 然り。

その後、 LISP を筆頭とする高級言語が台頭するのを皮切りに、こうした物理的な型の区別に加え、より観念的な、あるいは実務的な型の概念が採用されるようになってゆきました。 文字列、ポインタや参照、列挙値、配列や構造体、共用体、未定義値、そしてオブジェクトや関数などです。

JavaScript の型概念は、物理的な数値の区別は一切排除し、その一方でオブジェクトのクラスの違いを型とは別の次元で区別するルールを採用しています。まずは、 JavaScript にどのような型が用意されているのかを、一通り見てみることにしましょう。

数値

JavaScript には整数と実数の区別がありません。もちろん、整数の精度毎の区別もありません。数値として扱う値はすべて、数値型の値として扱われます。

// 以下はすべて数値型の値
var a = 0;
var b = 20100802144236;
var c = -12.3456;
var d = 1.73e-11;
var e = Infinity;   // 無限大
var f = NaN;        // 非数

上記で変数 d に代入している値は、数学的には「1.73×10-11」という意味です。

Infinity は無限大を表す定数です。任意の値を 0 で割った場合にもこの値を得られます。 Infinity で掛けた数値はどんな数値でも Infinity になり、 Infinity で割った数値はどんな数値でも 0 になります。

NaN は非数を表す定数です。例えば負の値の平方根を求めようとしたりすると、この値を得られます。数値型ではありますが、数値ではありませんので、他のどの数値とどのような演算を行っても結果は NaN になります。

数値型の値には、さまざまな数値演算を適用することができます。また、数値同士の足し算は、通常の数値の足し算として計算した結果が得られます。

var a = 12.3 + 45.6;        // 57.9
var b = 8901 - 2345 / 67;   // 8866
var c = 650 % 7;            // 6

数値型の値と文字列型の値の足し算を行った場合、数値を数字の文字列に置き換えた上で、連結された文字列が結果として得られます。

var d = 12.3 + "45.6";      // "12.345.6"
var e = "社員数: " + 1;     // "社員数: 1"
var f = "1 + 1 = " + 1 + 1; // "1 + 1 = 11"

上記の変数 f に代入する例はよくある間違いで、恐らく本来意図した通りの動作ではないでしょう。足し算は数値の足し算でも文字列の連結でも左から順に行うので、このケースでは数値の足し算を括弧で括る必要があります。

var f = "1 + 1 = " + (1 + 1);   // "1 + 1 = 2"

文字列

ダブルクォーテーションマーク '"'~'"'、およびシングルクォーテーションマーク "'"~"'" で括った文字列は、文字列値として扱われます。

var a = "Hello, World!!";
var b = 'Goodbye, dream...';

文字列は足し算演算子で連結が可能です。文字列と数値の足し算もまた、数値をその数字の文字列として扱った上で連結されます。

var c = "T.MURACHI は " + 1978 + "年 " + 2 + "月 " + 7 + "日生まれの " + 32 + "歳です。";

文字列中に、 C 言語ライクなエスケープ文字を含めることもできます。

var d = "いろはにほへと\nちりぬるをわか\nよたれそつねな\n" +        // \n は改行文字
    "らむうゐのおく\nやまけふこえて\nあさきゆめみし\nゑひもせすん";
var e = "氏名:\t村山 俊之\n年齢:\t32\n性別:\t男性";                 // \t はタブ文字
var f = "-?(?:\\d+\\.?|\\d*\\.\\d+)(?:e[\\+\\-]?\\d+)?";             // \\ は \ そのもの
Note: See TracWiki for help on using the wiki.