JavaScriptの文字列と数値について

とほほのWWW入門 > とほほのJavaScript入門 > JavaScriptの文字列の数値について
1999年7月4日版

■ 数値変数と文字列変数がある

JavaScriptの変数の型は結構いい加減です。以下のようにしたとき、xxは数値型の123が、yyは文字列型の"123"が代入されます。
   xx = 123;
   yy = "123";
変数が数値変数か、文字列変数かは、IE4.0/NN3.0からサポートされた typeof() を用いて調べることができます。
   xx = 123; alert(typeof(xx));
   yy = "123"; alert(typeof(yy));

■ 0を足すのと0を引くので結果が異なる!?

文字列を含む足し算は文字列演算子として扱われます。双方が数値の場合や、引き算、掛け算、割り算の時は、数値として扱われます。そのため、"123"に0を足すと"1230"、0を引くと 123 という奇妙な結果になったりします。
   xx = "123" + 0; → 1230 となる
   xx = "123" - 0; → 123 となる

   xx = "123" + "1"; → "1231" となる
   xx = "123" + 1; → "1231" となる
   xx = 123 + "1"; → "1231" となる

   xx = 123 + 1;  → 124となる
   xx = "123" - "1"; → 122 となる
   xx = "123" * "1"; → 123 となる
   xx = "123" / "1"; → 123 となる

■ 5を足したはずだったのに・・・

フォームの値を計算するときに、よくこの間違いをするので、注意が必要です。下記の例では、フォームに入力したデータに5を足すつもりですが、実際には、文字列として最後に "5" を付け足すという処理になってしまいます。
   document.FORM1.TEXT1.value += 5;

■ 文字変数を数値変数にする技

文字列を数値に変換するにはNumber()、parseFloat()、parseInt()、eval()など、数値を文字列に変換するにはString()などを用います。また、数値にするには0を引く、文字列にするには "" を足すという方法もあります。
    xx = "123"; xx -= 0; → xxは数値変数になる
    xx = 123; xx += ""; → xxは文字列変数になる

■ AとBの比較結果が同じだったり違ったりする!?

比較演算子(==)で数値と文字列の比較を行う場合はさらに注意が必要です。下記の例は、大抵のブラウザで「同じ」という結果になります。
    <SCRIPT LANGUAGE="JavaScript"> <!--
    if ("123" == 123) {
        alert("同じ");
    } else {
        alert("違う");
    }
    //--> </SCRIPT>
ところが、NN4.0では、LANGUAGE="JavaScript1.2"とした時は文字列と数値は厳密に解釈するというとんでもない仕様変更を行ってしまったため、LANGUAGE="JavaScript1.2" にすると上記の結果は「違う」になってしまいます。(さすがに、この仕様変更は不評だったためか、NNのJavaScript1.3では、再度仕様が戻されています。IEではずっと「同じ」のままです。)
    <SCRIPT LANGUAGE="JavaScript1.2"> <!--
    if ("123" == 123) {  ← NN4.0でのみ、偽になってしまう
         :
こんな状況で、混乱が続いていますが、最近(IE4/NN45)のバージョンでは、演算子==は型を無視し、演算子===は型を厳密に解釈するということにしています。
    if ("123" == 123) ← 同じ
    if ("123" === 123) ← 違う
しかし、演算子===をサポートしていないブラウザもまだ多数存在するため、まだ、しばらくの間は、下記のように、明示的に数値に変換してから比較するのがお勧めです。
    if (parseInt("123") == parseInt(123)) {

Copyright (C) 1996-1999 とほほ
http://wakusei.cplaza.ne.jp/twn/wwwjsz01.htm