忘れる前に覚書。優しい文章を目指します。
ザ・覚書 ザ・覚書
出来るだけ子供にも、わかりやすいように書いて行きたいと思います。

PCバージョンでサイトを表示しています。
【ザ・覚書 3クリックアンケート実施中】
暑さの一番の原因はなんだと思いますか?
あなたの支持する政党はどの党ですか?

JavaScript 明示的な変数宣言と文字コードの取得(charCodeAt)

☆JavaScript 明示的な変数宣言と文字コードの取得(charCodeAt)
今のページの関連ページのリストへ
ザ・覚書のトップページに戻る

結果は、前回の「JavaScript 計算してみる(parseInt)」と同じなんですが、処理が違います。

今度は、文字コードをみて、半角数値かどうか判断させます。
このページは、文字コードUTF-8で作っているので、そのコードで判断してみました。

また、JavaScriptの変数宣言は、通常明示的ではないようですので、Cに慣れた私にはイライラします。
そこで、明示的に設定してみました。

前回と同じ足し算です。
箱の1個目と2個目に数値を入れて「=ボタン」を押してみてください。


コードの説明を書いておきます。





・HTML部分




<FORM name="form1">
  <INPUT size="25" type="text" name="A">
  +
  <INPUT size="25" type="text" name="B">
  <INPUT type="button" value="=" onclick="Main( this.form )">
  <INPUT size="25" type="text" name="X">
</FORM>



前とほぼ一緒です。
関数名を変えました。

・スクリプト部分



// 半角数字かどうかを判断する関数
// 戻り値 TRUE:半角 FALSE:半角数字じゃないか、半角数字だけじゃない
function HankakuSuujidesuka( mojiretu )
{
    var i = new Number();           // 作業変数
    var mojicode = new String();    // 文字コードを入れる用
    var flag = new Boolean( 0 );    // 判断を入れる用

    // 文字の長さ分ループさせる
    for ( i = 0; i < mojiretu.length; i++ )
    {
        // 指定した1個の文字の文字コードを取得
        mojicode = mojiretu.charCodeAt( i );

        // 半角数字かどうかみる UTF-8の数値のコード範囲か?
        if ( ( mojicode >= 0x30 ) && ( mojicode <= 0x39 ) )
        {
            //document.write("1");
            flag = true;
        }
        else
        {
            flag = false;
            break;  //  数値以外が見つかったらforをやめる
        }
    }
    return  flag;
}

function Main( obj )
{
    var num0 = new String( obj.elements[ 0 ].value );
    var num1 = new String( obj.elements[ 1 ].value );
    var bnum0 = new Boolean( 0 );
    var bnum1 = new Boolean( 0 );

    // 半角数字かな?
    bnum0 = HankakuSuujidesuka( num0 );
    bnum1 = HankakuSuujidesuka( num1 );

    // どっちも整数値かな? 
    if ( ( bnum0 == true ) && ( bnum1 == true ) )
    {
        // 同じなら
        num0 = parseInt( num0, 10 ); // 整数値に変換 
        num1 = parseInt( num1, 10 ); // 整数値に変換 
        obj.elements[3].value = num0 + num1;
    }
    else
    {
        // 整数値でない
        obj.elements[3].value = "半角で整数値をいれてね";
    }
}

</SCRIPT>




・明示的な宣言


通常、
var i;
としている所を
var i = new Number();
こんな感じにする事で、「i」を、Nunberオブジェクトにするようです。

個人的に、明示的な方がスッキリします。
JavaScriptの変数宣言は、通常明示的ではないようですので、宣言ミスはバグの元になるCに慣れた私にはイライラするのです。
こっちの方が見ててわかりやすいですし。
JavaScriptは、JavaScriptと割り切って、通常は、varだけでしますが、今回は特別に勉強がてらにしときます。

他には、型には、StringとBooleanがあるようでしたので、それも使ってみました。


JavaScriptって、C++のBOOL型の
BOOL flag;
という簡単宣言が出来ないんですね・・・。
何も考えず、Cと同じように書いて、コードが通らないので、結構手間取りました。

わざわざ、こう書かないといけないようです。
var flag = new Boolean( 0 );

わざわざBOOL型でしなくても、数値型でも良いんですが。

また、大文字の「TRUE」や「FALSE」も使えないんですね・・・。

あと、普通だとnewしたらdeleteしないとメモリに溜まると思うのですが、
JavaScriptは、ガベージコレクション(動的に確保したメモリ領域のいらない領域を勝手に開放)というので、
関数の実行終了時に削除してくれるらしいのですが、本当なのかな?

JavaScriptで、大きいシステムは作る気はありませんが、長い処理の関数でいっぱい変数使えば解放って必要になってくるんじゃないのかな?


・文字コードの取得




// 指定した1個の文字の文字コードを取得
mojicode = mojiretu.charCodeAt( i );

// 半角数字かどうかみる UTF-8の数値のコード範囲か?
if ( ( mojicode >= 0x30 ) && ( mojicode <= 0x39 ) )



の部分です。

ここは、文字コードを1文字ずつ取得して、半角数値「0から9」かな? と見ています。
「charCodeAt」が、JavaScriptに元々ある関数です。


しょーもないプログラムですが、第2歩です。


記述:2014年03月頃





Twitter Facebook Google+ はてな Pocket LINE




一言掲示板です。なにかありましたら以下に書いて書き込みボタンを押して下さい。
管理人による書き込みの確認後、荒らし書き込みでない場合に表示させていただきます。
悪意ある書き込みや挑発的な書き込みと思われる内容は、表示させません。
その為、ちょっと書き込みから表示までに時間がかかってしまいます。ご了承下さい。

お名前

コメント




基礎
JavaScript 計算してみる(parseInt)
JavaScript 明示的な変数宣言と文字コードの取得(charCodeAt)
【ザ・覚書 3クリックアンケート実施中】
暑さの一番の原因はなんだと思いますか?
あなたの支持する政党はどの党ですか?

今のページの関連ページのリストへ
ザ・覚書のトップページに戻る
全ページのリストへ