【管さんのNodeの旅・1】JavaScript基礎復習(一)

1773 ワード

タイプ
JavaScriptタイプは簡単に二つのグループに分類できます.基本タイプと複雑なタイプです.基本タイプにアクセスします.アクセスは値です.複雑なタイプにアクセスします.アクセスは値の参照です.
    //    
    var a = 5;
    var b = a;
    b = 6;
    a; //=>5
    b; //=>6

    //    
    var a = ['hello', 'world!'];
    var b = a;
    b[0] = 'bey';
    a[0]; //=>bey
    b[0]; //=>bey
上記の複雑なタイプの例では、aとbは同じ値の参照を含んでいる.したがって、配列の最初の要素がbによって修正されると、aの対応する値も変化し、つまりa[0]==b[0]となる.
タイプの判断
JavaScriptで正確に変数を判断するタイプは容易ではない.いくつかの例を通してみましょう.
    //       
    var a = 'hello';
    var b = new String('world!');
    a + b; //=>hello world!
aとbに対してtypeofとinstance ofの操作を行います.
    typeof a == typeof b; //=>false
    a instanceof String; //=>true
    b instanceof String; //=>false
意外な結果ですが、bは文字列ではないですか?答えはこの二人とも本物の文字列です.
    a.substr == b.substr; //=>true
また、==を使うと判定が等しくなり、==を使うと結果が違ってきます.
    a == b; //=>true
    a === b; //=>false
類型定義に差異があることを考慮して、類型を定義する際にnewを回避し、直観定義を使用することを提案する.
条件表式にはfalse:null、undefined、''と判定される値があります.
もう一つの状況を見に来ます.
    //      
    var a = null;
    var b = [];
    var c = {};
私たちは定義した変数に対してtypeofとinstance ofの操作を続けます.
    typeof a == typeof b; //=>true
    typeof b == typeof c; //=>true
    a instanceof Object; //=>true
    b instanceof Object; //=>true
    c instanceof Object; //=>true
この時は直接タイプで判断することができません.その時は対象内部の「クラス」の値を確認します.
    Object.prototype.toString.call(b) == Object.prototype.toString.call(c); //=>false
    Object.prototype.toString.call(b) == '[object Array]'; //=ture
instance of Arayこの方法は配列初期化と同じコンテキストでのみ有効である.