JavaScriptノートを整理する(三)

24639 ワード

1.1文法
1.1.6式
  • 式の後には、一般的に続く.
  • 演算子と他の表現
  • 三元演算子
  • 関数呼び出し
  • 属性抽出式
  • 演算子優先度は上から下へ
    	. [] ()                        -            
    	delete new typeof + - !        -        
    	* / %                          -           
    	+ -                            -     /     
    	>= <= > <                      -                  
    	=== !==                        -           
    	&&                             -      
    	||                             -      
    	?:                             -        
    
    typeof演算子の生成値は、‘number’、‘string’、‘bollan’、‘undefined’、‘function’、’object’の6つの値だけです.
       typeof null === 'object', typeof [] === 'object',     。
            :
    
    function DataType(obj, type) {
    	return Object.prototype.toString.call(obj) === "[object " + type + "]" ? true : false;
    }
    
    +                   。              。         。
    
    '0' + 1 === '01'; // true
    1 + '0' === '10'; // true
    1 + 0 === 1; // true
    
    &&          &&   , &&   , &&   , &&   。
    
    var a = 0;
    a && a++; // false
    a; // 0
    
    var b = 1;
    b && b++; // true
    b; // 2
    
          (    )   false,          (    )。
          (    )   true,         (    )。
    
    ||          ||   , ||   , ||   , ||   。
    
    var c = 0;
    c || c++; // true
    c; // 1
    
    var d = 1;
    d || d++; // true
    d; // 1
    
          (    )   false,         (    )。
          (    )   true,          (    )。
    
    !         !   ,!   。
    
    !true === false; // true
    !false === true; // true
    !undefined === true; // true
    !null === true; // true
    !"" === true; // true
    !0 === ture; // true
    !NaN === true; // true
    
    1.2オブジェクト
    1.2.1オブジェクトの字面量
    -新規オブジェクト値の表示法を作成します.
    var obj = {};
    var obj_2 = {
    	name: "Ama_zhe",
    	"": "hello world"
    };
    obj_2[""] === "hello world"; // true
    
    -属性名は、空の文字列を含む任意の文字列とすることができます.属性名が合法的なJavaScript識別子であり、かつ単語を保持していない場合、属性名は引用符を必要としない.
    var obj_3 = {
    	value: 1,
    	"first-name": "fan"
    }
    
    1.2.3検索
  • 検索対象内の値
  • 優先的に使用します.文法、次は[]文法です.検索した属性名が表現式である場合は[]を使用して取得します.
  • 存在しない属性を検索するとundefinedに戻ります.
  • は、𞓜演算子を使用してデフォルトのパディングを行うことができます.
  • var hello = obj_3.status || "0"; // "0"
    
    -undefinedから属性を取得するとエラーが発生し、&&&
    var hi = obj_3.status && obj_3.status.value; // undefined
    
    1.2.4更新
    -オブジェクトの属性名が既に存在している場合、オブジェクトの属性名を付与すると、その属性の値が更新されます.
    obj_3.value = 2;
    obj_3.value === 2; // true
    
    -オブジェクトの前に属性名がない場合は、オブジェクトに属性を追加します.
    obj_3.name = "Stafan";
    obj_3; // { value: 2, "first-name": "fan", name: "Stafan" }
    
    1.2.5参照
    -オブジェクトは参照によって値を伝達します.それらは永遠にコピーされません.
    var a = obj_3;
    a.status = "1";
    var b = obj_3.status;
    b; // "1" a obj_3         ,a.status    obj_3   status  ,  b   "1"。
    var c = {}, d = {}, e = {}; //           
    c === d; // false
    c === e; // false
    d === e; // false
    var f = g = h = {}; //         
    f === g; // true
    f === h; // true
    g === h; // true
    
    1.2.6プロトタイプ
    -オブジェクトごとに原型オブジェクトに接続します.文面量で作成したオブジェクトはすべてObject.prototypeに接続されています.
    if(typeof Object.create != "function"){
    	Object.create = function(obj){
    		var Fn = function(){};
    		Fn.prototype = obj;
    		return new Fn();
    	}
    }
    var obj = {
    	name: "a",
    	value: "100"
    };
    var obj2 = Object.create(obj);
    obj2.name = "b";     //                  
    obj2.value = "200";  //                  
    obj.name; // "a"
    obj.value; // "100"
    obj2.name; // "b"                     
    obj2.value; // "200"                  
    
    -ただし、検索対象の属性の場合、そのオブジェクトに検索する属性がない場合は、原型オブジェクトから取得します.オブジェクトとそのプロトタイプのチェーンに取得する属性がない場合は、undefinedに戻ります.
    obj.data = "data";
    obj2.data; // "data"
    obj2.opt; // undefined
    
    1.2.7反射
    -オブジェクトの属性の種類をチェックします.
    var obj3 = {
    	name: "Ama_zhe",
    	number: 2,
    	obj: {}
    };
    typeof obj3.name === "string"; // true
    typeof obj3.number === "number"; // true
    typeof obj3.obj === "object"; // true
    typeof obj3.aaa === "undefined"; // true
    
    -プロトタイプチェーンのどの属性も「funtion」に戻ります.
    typeof obj3.toString === "function"; // true
    typeof obj3.constructor === "function"; // true
    typeof obj3.valueOf === "function"; // true
    
    -ハスOwnPropertyは対象特有の属性を検査し、プロトタイプチェーンを検査しない:
    obj3.hasOwnProperty(name) === true; // true
    obj3.hasOwnProperty(toString) === false; // true
    
    1.2.8列挙
  • for…inは、オブジェクト内のすべての属性名(プロトタイプチェーン内の属性を含む)を列挙し、ハスOwnPropertyと
  • を使用する.
  • typeofは、望まない属性や関数をフィルタリングします.
  • 属性名の出現順序は不確かであり、属性が特定の順序で出現する場合は、for...inを使用しない方が良い.
  • 1.2.9削除
    -delete演算子は、オブジェクトの属性を削除するために使用します.プロトタイプチェーンの同名属性は削除されません.
    var obj6 = {
    	a: 1,
    	b: 2
    };
    delete obj6.a;
    obj6; // { b: 2 }
     
    var obj = {
    	a: 1,
    	b: 2,
    	name: "seven"
    };
    var Fn = function(){};
    Fn.prototype = obj;
    var obj_n = new Fn();
    obj_n.name = "eight";
    obj_n.name; // "eight"
    delete obj_n.name;
    obj_n.name; // "seven"
    
    1.2.10グローバル変数の汚染を減らす
    -グローバル変数を最小化する方法は、唯一のグローバル変数のみを作成することです.
    var GLOBAL_VARIABLE = {};
    
    -グローバル変数の他の変数の属性を指定します.
    GLOBAL_VARIABLE.API = {
    	common_link: ""
    };
    GLOBAL_VARIABLE.initFn = {
    	add: function(){
    		var sum = 0;
    		Array.apply(this, arguments).map(function(a){
    			sum += a;
    		});
    		return sum;
    	}
    };
    
    私のブログへようこそ.zhe------内容は個人整理です.間違いがあれば、ご指摘ください.ありがとうございます