javascript言語の精粋学習ノート(二)

4939 ワード

javascript言語の精粋学習ノート(二)
次に、式の後の部分を見てみましょう.
表式
基本的な表現は、字面の量、変数、内蔵の値(true、false、null、undefined、NaN、Infinity)、newで始まる呼び出し式、deleteで始まる属性抽出式、前置演算子を先頭とする表現、または以下のように構成されています.
  • expression+infix operator+expression
  • expression?expression:expression
  • 関数呼び出し
  • 関数抽出式
  • 後は表式結合の重要なルールです.優先度は上から下へ下げます.
    .   []  ()                                   
    
    delete  new typeof  +   -   !            
    
    *   /   %                             、  、  
    
    +   -                                 /  、  
    
    >=    <=    >    <                        
    
    ===   !==                                
    
    &&                                     
    
    ||                                     
    
    ?:                                    
    
  • typeof演算子によって生成される値は、'number'、'string'、'bollan'、'undefined'、'function'、'object'があります.nullのtypeofは結果的にobjectです.
  • +演算子は、両方の演算数が数字の場合にのみ加算の役割を果たします.そうでなければ、文字列接続の役割です.
  • /演算子は、両方の演算数が整数であっても、非整数結果を生成することができる.前述のjsデフォルトの数字タイプは64ビットの浮動小数点数
  • です.
    文字の量
    オブジェクトの文字列の属性名は、識別子または文字列とすることができます.これらの名前は、変数ではなく字面の名前として扱われていますので、対象の属性名はコンパイル時に分かります.属性の値は式です.
    関数
    この章は関数についてちょっと紹介しただけです.詳しい内容は後の章で詳しく説明します.
    第三章対象
    醜いものは目を閉じて無視する.
    ——ウィリアム・シェークスピアの『ヴィロナ二紳士』(The Two Gentlemen of Verona)
  • jsの単純なデータタイプは、数字、文字列、ブール値(true、false)、null値、およびundefined値を含む.他のすべての値は対象です.
  • 配列、文字列、ブール値はオブジェクトに似ています.彼らはすべて利用可能な方法があると思いますが、彼らは可変ではありません.jsのオブジェクトは可変キーセットです.(なぜ対象ではないかというと、方法があります.これは「javascript高級プログラム設計」の中の内蔵対象の章をめくってみてもいいです.その中でいくつかの基本的なタイプがどのように包装タイプの呼び出し方法になるかを説明しました.)
  • オブジェクトは属性のセットであり、属性名は空の文字列を含む任意の文字列であってもよい.
  • jsの対象は無タイプです.
  • jsは、プロトタイプチェーンという特性を含み、対象が他のオブジェクトに対する属性を継承することができる(ここでの継承と従来のオブジェクトに対する継承は区別があり、概念をそのまま運ぶことができない).オブジェクト初期化の時間とメモリの消費を減らすことができます.
  • 対象文字数
    対象の文字の量は、ペアの括弧の中の0以上の「名/値」のペアです.オブジェクトの文字列の量は、任意の許容表現の場所に表示されます.オブジェクトはネスト可能で、属性の値は別のオブジェクトの字面量としても良いです.
    属性名が合法的なjs識別子であって、予約ワードではない場合は、属性名を引用符で強制的にくくりません.
    検索
  • は、接尾辞を用いて文字列表現を囲み、対象内の値を検索することができる.しかし、js識別子命名仕様に適合する場合には、優先的に使用する.表現法は、よりコンパクトで読み取り可能であるため、より良い.
  • は、存在しないメンバー属性を検索すると、undefinedに戻る.
  • 𞓜演算子は、デフォルトの値を満たすために使用されてもよい.
    var middle = stooge["middle-name"] || "(none)";
    var status = flight.status || "unknown";
    
  • は、undefinedのメンバー属性から値を取ることを試みると、TypeErrになります.この場合は&&演算子によってエラーを回避することができます.
    flight.equipment            //undefined
    flight.equipment.model      //throw "TypeError"
    
  • 更新
  • オブジェクト内の値は、割り当てられた語句によって更新されてもよく、既にオブジェクト内に存在している場合は、置き換えられます.
  • オブジェクトが以前にその属性がなかったら、その属性はオブジェクトに拡張されます.
  • 参照
    オブジェクトは参照によって伝達され、永遠に複製されません.
    原型
  • 各オブジェクトは一つのプロトタイプオブジェクトにリンクされ、その中から属性を継承します.
  • すべてのオブジェクトの字面量から作成されたオブジェクトは、Object.prototypeに接続されています.これはjsの標準オブジェクト
  • です.
  • 新しいオブジェクトを作成すると、オブジェクトをプロトタイプとして選択できます.Object.createメソッドは、元のオブジェクトをその原型として使用する新しいオブジェクトを作成します.
    if(typeof Object.beget !== 'function') {
        Object.create = function(o) {
            var F = function (o) {};
            F.prototype = o;
            return new F();
        };
    }
    var another_stooge = Object.create(stooge);
    
  • プロトタイプは更新時には機能しません.あるオブジェクトを変更すると、そのオブジェクトの原型には触れません.
  • は、あるオブジェクトの属性値を取得しようと試みるが、この属性名がない場合、jsは、プロトタイプオブジェクトから属性値を取得しようと試みる.もしその原型の対象がなかったら、その原型から検索して、最後までObject.prototypeに到達します.プロトタイプチェーンが全く存在しない場合、結果はundefinedです.
  • プロトタイプ関係は、新しい属性をプロトタイプに追加すると、そのプロトタイプに基づいて作成されたすべてのオブジェクトにすぐに表示されます.
  • 反射
  • typeofオペレータは、属性の種類を決定するのに役立つ.
  • プロトタイプチェーンのどの属性も値
    typeof flight.toString         //'function'
    typeof flight.constructor      //'function'
    
  • を生成することに注意してください.
  • には、これらの不要な属性を処理できる2つの方法がある.一つ目はあなたのプログラムをチェックして、これらの値を関数としての属性を破棄します.しかし、いくつかの値は関数かもしれません.
  • のもう一つの方法はハスOwnProperty方法を使用することであり、この方法はプロトタイプチェーンを検査しない.
  • 列挙
  • for in文は、一つのオブジェクトのすべての属性名を巡回するために使用されますが、これは関数とプロトタイプの属性を含みます.不要な属性をフィルタリングするための一般的な方法は、ハスOwnProptyとtypeofです.
    vaf name;
    for (name in another_stooge){
        if(typeof another_stooge[name] !== 'function'){
            document.writeln(name + ': ' + another_stooge[name]);
        }
    }
    
  • は、遍歴の順序が不確定であるため、属性を特定の順序で出現させるために、for in文の使用を完全に回避するのが最善の方法である.配列を作成し、属性名を正確な順序で含む.
    削除
  • delete演算子は、オブジェクトの属性を削除するためにのみ使用できます.この属性がオブジェクトに含まれている場合、属性は削除されます.
  • 原型チェーンの中のどのオブジェクトにも触れません.
  • オブジェクトの属性を削除すると、プロトタイプチェーンの同名の属性が暴露される可能性があります.
    var i;
    var properties = [
        'first-name',
        'middle-name',
        'last-name',
        'profession'
    };
    for(i = 0; i < properties.length; i += 1) {
        document.writeln(properties[i] + ': ' + another_stooge[properties[i]]);
    }
    
  • グローバル変数の汚染を減らす
    jsはすべてのリソースを格納するために、グローバル変数を柔軟に定義することができる.残念なことに、グローバル変数はプログラムの柔軟性を弱め、使用を避けるべきです.
    グローバル変数を最小化する方法の一つは、アプリケーションのコンテナとしてユニークなグローバル変数を作成することです.
    eg.次は関数部分のメモです.