>
オブジェクト
オブジェクトって何?
オブジェクトの基本
ビルドインオブジェクト


オブジェクトって何?

オブジェクトってわかったようでよくわからない人は案外多いのかも?
オブジェクトの概念が登場する前では、データとモジュール(関数)がバラバラ に扱われていました。文字列の表示ではchar型の配列とprintf()などを使って いました。データとモジュールをまとめたかたまりがありませんでした。データ だけなら構造体を使ってかたまりを定義できました。C++で構造体で関数がつかる ようにしたクラスの登場です。Visual C++やBorland C++などが有名どころの 統合開発環境でした。しかし、C++は好き勝手にコードを書いていた人にはルールに 縛られるのが嫌なようで開発についていけない人も多かったようです。

社員オブジェクトで考えてみましょう。

社員のデータ(プロパティ)とそのデータを使った処理(メソッド)から成り立ちます。
現在日時から生年月日を計算すれば年齢がわかります。また同様に現在日時から入社年度を 計算すれば勤務年数がわかります。このようにプロパティをメソッドが操作することにより 知りたい情報の取得が可能になります。
何人かの社員がいるのでこのオブジェクトは配列として処理されます。

オブジェクトの基本

オブジェクトを生成するにはnew演算子を使います。代わりに{}が使えます。

    var obj0  = new Object();
    console.log(obj0);//{}
    var obj1  = new Object();
    console.log(obj1);//{}
                   
どちらも{}が出力されています。これはオブジェクトが中身なしの状態です。 データつまりプロパティを作成するには、
key:data
の形式で定義します。JavaScriptの連想配列と解説している サイトがありますが、本当はオブジェクトなんです。

    stuff = {
        name  : "Yamada",
        birthDay : new Date('2000/12/25')
    };
    console.log(stuff);//{name: 'Yamada', birthDay: Mon Dec 25 2000 00:00:00 GMT+0900 (日本標準時)}
    console.log(stuff.name);//Yamada
    console.log(stuff.birthDay);//Mon Dec 25 2000 00:00:00 GMT+0900 (日本標準時)

これでプロパティが定義できました。次は年齢を取得するメソッドを追加します。

    stuff = {
        name  : "Yamada",
        birthDay : new Date('2000/4/26'),
        getAge(curDate){
            //とりあえず今年から誕生年を計算
            var age = curDate.getYear() - this.birthDay.getYear();
            //誕生日を過ぎていなければ年齢を-1する
            if(curDate.getMonth() < this.birthDay.getMonth()){
                age--;
            }
            else if(curDate.getMonth() == this.birthDay.getMonth()){
                if(curDate.getDate() < this.birthDay.getDate()){
                    age--;
                }
            }
            return age;
        }
    };
    console.log(stuff.getAge(new Date));//22
            
年齢を取得するメソッドgetAgeを追加しました。Dataオブジェクトの引き算は サポートされていないので自力で年齢を計算しています。別に難しい処理ではない ので説明は割愛します。
このようにプロパティとメソッドを定義して自前のオブジェクトを作成する ことができます。

ビルドインオブジェクト

変数はオブジェクト
変数 でも紹介したように変数はオブジェクトです。

aの後にドットを打つと、メソッドの候補が表示されます。VS Code のインテリセンスは大変便利です。
このようにあらかじめ用意されているオブジェクトはビルドインオブジェクトです。
ビルドインオブジェクト 内容
String 文字を扱うためのオブジェクト
Array 配列を扱うためのオブジェクト
Number 数値を扱うためのオブジェクト
Math 数学の関数を扱うためのオブジェクト
Date 年月日や時刻を扱うためのオブジェクト
RegExp 正規表現を扱うためのオブジェクト
Function 関数を扱うためのオブジェクト


String
文字を扱うためのオブジェクトです。オブジェクトなので堅苦しく書けば、

    var a = new String("text");
    console.log(a);//出力 String ('text')
    console.log(typeof(a));//出力 object
    var b = "text";
    console.log(b);//出力 text
    console.log(typeof(b));//出力 string

    //比較
    if(a == b){
        console.log("a == b");//こちらを通る
    }
    else{
        console.log("a != b");
    }

    //型も含めて比較
    if(a === b){
        console.log("a === b");
    }
    else{
        console.log("a !== b");;//こちらを通る
    }
                        
a,bは同じように見えますが、型がobjectとstring の違いがあります。どこが違うのかVS Code でメソッドに 違いがないか調べてみます。
aのメソッド。

bのメソッド。

同じです。
var b = "text"; で定義したbは自動的にStringに扱われプロパティや メソッドが使えます。

Stringのメソッド
charAt
charCodeAt
concat
indexOf
lastIndexOf
subString
slice
substr
replace

charAt(n)
文字列のn番目の文字を取得します。

    var str = "0123456789abcXYZ";
    console.log(str.charAt(1));//1を取得


charCodeAt(n)
文字列のn番目の文字コードを取得します。

    var str = "0123456789abcXYZ";
    console.log(str.charCodeAt(3));//51を取得


concat(str)
文字列の最後にstrを連結します。

    var str = "0123456789abcXYZ";
console.log(str.str.concat("---Java"));//0123456789abcXYZ---Java


indexOf(str, start)
文字列にstrが含まれているインデックスを取得します。
    var str = "0123456789abcXYZ";
    console.log(str.indexOf("abc"));//10
    var str1 = "sadaji@sadaji.net";
    var find = "daji";
    var pos =str1.indexOf(find);
    console.log(pos);//2
    pos += find.length;
    console.log(pos);//6
    pos = str1.indexOf(find, pos);
    console.log(pos);//9
    pos = str1.indexOf(find, pos + find.length);
    console.log(pos);//-1
2行目はabcが含まれる位置を取得しています。複数含まれない のならこの書き方でOKです。しかし、複数の含まれ場合3行目は、 開始位置startの指定なしで実行(5行目)。
次に取得した位置(2)に検索文字の長さをstratにして実行(9行目)。 同様に実行すると文字が含まれる位置がないので-1が返ります。

lastIndexOf(str, start)
文字列にstrが含まれているインデックスを最後から取得します。
    var str1 = "sadaji@sadaji.net";
    var find = "daji";
    var pos =str1.lastIndexOf(find);
    console.log(pos);//9
    var pos =str1.lastIndexOf(find, pos-1);
    console.log(pos);//2

subString(start, end)
文字列に最初のインデックスから最後インデックス前までの文字列を取得します。
    var str = "javaスクリプト";
    var s = str.substring(2,7);
    console.log(s);//vaスクリ
    s = str.substring(7,2);
    console.log(s);//vaスクリ
順番が逆になっても同様に文字列を取得します。

slice(start, end)
文字列に最初のインデックスから最後インデックス前までの文字列を取得します。
    var str = "javaスクリプト";
    var s = str.slice(2,7);
    console.log(s);//vaスクリ
    s = str.slice(7,2);
    console.log(s);//空
順番が逆になると文字列は空になります。substringとは違います。

substr(start, length)
文字列のインデックスから指定された長さの文字列を取得します。
    var str = "javaスクリプト";
    var s = str.substr(2,6);
    console.log(s);//vaスクリプ

replace(str1, str2)
文字列str1を文字列str2で置き換えます。
    var str = "javaスクリプト";
    var s = str.replace("java", "python");
    console.log(s);//pythonスクリプト