『javascript言語精粋』読書ノートItem 2対象


第三章対象
JavaScriptの単純なデータタイプは、数字、文字列、ブール値(trueおよびfalse)、null値およびundefined値を含む.他の数字、文字列、ブール値の「似ている」オブジェクトは、方法がありますが、それらは可変ではありません.JavaScriptのオブジェクトは可変のキーコレクションである.
オブジェクトは属性のコンテナで、属性ごとに名前と値があります.属性の名前は、空の文字列を含む任意の文字列とすることができます.属性値はundefined値以外の任意の値とすることができる.
javascriptはプロトタイプチェーンの特性を含み、対象が別のオブジェクトの属性を継承することができます.正しく使うと、オブジェクト初期化の時間とメモリの消費を減らすことができます.
3.1対象文字数
属性名は空の文字列を含む任意の文字列とすることができます.属性値、合法的な非強制引号first_name、合法的ではないのは引用符をつけます.
var person={
    "name":"John",
    "age":18,
    "wife":{
         "name":"Lucy",
         "agen":22
    }
}
3.2検索
点.表示法または[]表示法.使用を優先的に考慮します.表現法は、よりコンパクトで読み取り可能性が高いからです.例えば:
person.name;
person["name"];
|𞓜演算子は、デフォルトの値を満たすために使用できます.
var status = flight.status || "unknow";
undefinedのメンバー属性から値を取る試みはTypeErr異常を引き起こす.エラーを回避するには&&演算子を使ってもいいです.
flight.equipment // undefined
flight.equipment.model // throw "TypeError"
flight.equipment && flight.equipment.model // undefined
3.3更新
オブジェクトの値は更新されます.属性がある場合は、属性値が置換されます.属性がないと、この属性はオブジェクトに拡張されます.
3.4参照
対象は引用によって伝達され、彼らは永遠にコピーされない.(伝えるのは住所だけです)
var x = stooge;
x.nickname = 'Curly';
var nick = stooge.nickname;
//   x stooge           ,  nick 'Curly'
var a = {}, b = {}, c = {};
// a、b c             
a = b = c = {};
// a、b c         
3.5プロトタイプ
(1)各オブジェクトは一つの原型オブジェクト、Object.prototypeという標準オブジェクトに接続されています.
(2)原型接続は更新時には機能しません.あるオブジェクトの属性値を変えると、オブジェクトの原型には触れません.(針のみのインスタンス属性の修正は、原型上の参照の種類によって対象の原型が変わります.)
(3)プロトタイプチェーンは検索値の時のみ使用し、あるオブジェクトの属性値を取得しようとすると、彼のプロトタイプチェーンに沿って下から上に順番に探します.Object.prototypeまで、Object.prototypeがまだこの属性がない場合、undefinedに戻ります.この過程を依頼といいます.
(4)プロトタイプ関係は、新しい属性をプロトタイプに追加すると、そのプロトタイプに基づいて作成されたすべてのオブジェクトに対して直ちに表示されます.
3.6反射
(1)typeofオペレータは、属性の種類を決定するために使用します.
(2)ハスOwnPropertyオブジェクトは独立した属性を持っているかどうか、彼はプロトタイプチェーン上のものを検出しない.
person.hasOwnProperty("name");//true
person.hasOwnProperty("c");//false
3.7列挙
(1)for in文は、オブジェクトの属性をすべて巡回します.プロトタイプチェーン上の属性も含まれます.typeofとhasOwnProperyでフィルタできます.
(2)for inを使用して、一つのオブジェクトの属性名を全て列挙する場合、属性名の出現順序は不確かです.属性を特定の順序で確保するには、for in文の使用を完全に避けることで、配列を作成し、属性名を正確な順序で含むことが望ましい.forを使うことでfor inではなく、私たちが欲しい属性が得られます.
3.8削除
delete操作符はオブジェクトの属性を削除しますが、プロトタイプチェーンの属性には触れません.
3.9グローバル変数の汚染を減らす
グローバル変数を最小化する方法は、あなたのアプリケーションで唯一のグローバル変数を作成することです.
var MYAPP={};

MYAPP.stooge={
    "first-name":"Joe",
    "last-name":"Howard"
}
MYAPP.person={
    "name":"John",
    "age":18,
    "wife":{
         "name":"Lucy",
         "agen":22
    }
}