| 1 | = 値と変数 = |
| 2 | |
| 3 | == 値の型 == |
| 4 | |
| 5 | 他の多くの言語がそうであるように、 !JavaScript にも値の'''型'''が存在します。 |
| 6 | |
| 7 | しかし、各言語が作られた目的やフィールドの違いに由来し、型の意味合いも言語毎に大きく異なります。古典的には、型と言えば精度の異なる複数の整数型と実数型を指すものでした。これは CPU が直接に理解できるマシン語の世界観に相当するものですが、この概念自体は古典的な多くの言語においてそのまま踏襲されます。 FORTRAN 然り、 PASCAL 然り、 BASIC 然り、 C 然り。 |
| 8 | |
| 9 | その後、 LISP を筆頭とする高級言語が台頭するのを皮切りに、こうした物理的な型の区別に加え、より観念的な、あるいは実務的な型の概念が採用されるようになってゆきました。 文字列、ポインタや参照、列挙値、配列や構造体、共用体、未定義値、そしてオブジェクトや関数などです。 |
| 10 | |
| 11 | !JavaScript の型概念は、物理的な数値の区別は一切排除し、その一方でオブジェクトのクラスの違いを型とは別の次元で区別するルールを採用しています。まずは、 !JavaScript にどのような型が用意されているのかを、一通り見てみることにしましょう。 |
| 12 | |
| 13 | === 数値 === |
| 14 | |
| 15 | !JavaScript には整数と実数の区別がありません。もちろん、整数の精度毎の区別もありません。数値として扱う値はすべて、数値型の値として扱われます。 |
| 16 | |
| 17 | {{{ |
| 18 | // 以下はすべて数値型の値 |
| 19 | var a = 0; |
| 20 | var b = 20100802144236; |
| 21 | var c = -12.3456; |
| 22 | var d = 1.73e-11; |
| 23 | var e = Infinity; // 無限大 |
| 24 | var f = NaN; // 非数 |
| 25 | }}} |
| 26 | |
| 27 | 上記で変数 d に代入している値は、数学的には「1.73×10^^-11^^」という意味です。 |
| 28 | |
| 29 | Infinity は無限大を表す定数です。任意の値を 0 で割った場合にもこの値を得られます。 Infinity で掛けた数値はどんな数値でも Infinity になり、 Infinity で割った数値はどんな数値でも 0 になります。 |
| 30 | |
| 31 | NaN は非数を表す定数です。例えば負の値の平方根を求めようとしたりすると、この値を得られます。数値型ではありますが、数値ではありませんので、他のどの数値とどのような演算を行っても結果は NaN になります。 |
| 32 | |
| 33 | 数値型の値には、さまざまな数値演算を適用することができます。また、数値同士の足し算は、通常の数値の足し算として計算した結果が得られます。 |
| 34 | |
| 35 | {{{ |
| 36 | var a = 12.3 + 45.6; // 57.9 |
| 37 | var b = 8901 - 2345 / 67; // 8866 |
| 38 | var c = 650 % 7; // 6 |
| 39 | }}} |
| 40 | |
| 41 | 数値型の値と文字列型の値の足し算を行った場合、数値を数字の文字列に置き換えた上で、連結された文字列が結果として得られます。 |
| 42 | |
| 43 | {{{ |
| 44 | var d = 12.3 + "45.6"; // "12.345.6" |
| 45 | var e = "社員数: " + 1; // "社員数: 1" |
| 46 | var f = "1 + 1 = " + 1 + 1; // "1 + 1 = 11" |
| 47 | }}} |
| 48 | |
| 49 | 上記の変数 f に代入する例はよくある間違いで、恐らく本来意図した通りの動作ではないでしょう。足し算は数値の足し算でも文字列の連結でも左から順に行うので、このケースでは数値の足し算を括弧で括る必要があります。 |
| 50 | |
| 51 | {{{ |
| 52 | var f = "1 + 1 = " + (1 + 1); // "1 + 1 = 2" |
| 53 | }}} |
| 54 | |
| 55 | === 文字列 === |
| 56 | |