javascript基礎知識整理-対象

13259 ワード





  

	//javascript       ,     ,    (       ),    ,    ,    (in),    (for..in)
	//               ,          ,      (property attribute)
	//       ,  (             ),   (        for.in       ),   (              )。
	//          ,           (object attribute),       ,         (      ),      (              )
	//        :
	//   native objetc,  ECMAScript        ,    ,  ,  ,      
	//       ,                    , DOM          ,            
	//            ,           
	//        :          ,              (    )
	//          
	//                ,                  ,                 (       )
	//                      
	var obj = {
		name : "duchao",
		age : 25
	};
	//         new        ,new         ,        
	var obj = new Date();//        
	var obj = new String();//         
	//         Object   create    ,              ,       ,               ,     
	var obj = Object.create(Object.prototype);//   var obj = new Object();
	var obj = Object.create(Array.prototype);//   var obj = new Array();
	var obj = Object.create(null);//  new                    ,        prototype  null   ,Object.create()     ,         __proto__   null  ,                 
	console.log(obj instanceof Object);//    Object.create(null)    ,  obj instanceof Object   false
	//              ,               。
	//       ,     null  undefined             。
	//var obj = null;
	//obj.name = "duchao";
	//console.log(obj.name);
	//              ,chrome firefox     ,          
	Object.prototype = 0;
	console.log(Object.prototype);//      0,  Object.prototype      
	//          o       
	//1、o    p    ,           ,     java  final(defineProperty()        ,               )
	//2、o    p     ,      ,                   。      java      final  ,      。
	//3、  o      p,    setter      , p      o ,   o      ,   o        。
	//        ,        delete   ,                 ,                  ,            ,   
	var p = 1;
	var obj = {};
	obj.p = p;
	delete obj.p;
	console.log("obj.p = " + obj.p);//  undefined
	console.log("p = " + p);//  1
	//delete              ,        (                        ,                 )
	// delete               (          )   true。  delete             ,    true。
	//delete           false   (                  ,                  ,           )
	//               ,                       
	//    
	//                ,    in   、hasOwnProperty() propertyIsEnumerable()         。
	var obj = Object.create({
		x : 1,
		y : 2
	});
	obj.name = "duchao";
	//in          (   ),     。                        true。
	console.log("'x' in obj = " + ("x" in obj));
	console.log("'name' in obj = " + ("name" in obj));
	//   hasOwnProperty()                     。              false。
	console.log("obj.hasOwnProperty('x') = " + obj.hasOwnProperty("x"));//     false,  x        
	console.log("obj.hasOwnProperty('name') = " + obj.hasOwnProperty("name"));//     true,  name obj     
	//propertyIsEnumerable()   hasOwnProperty()      ,                     true    true
	console.log("obj.propertyIsEnumerable('x') = " + obj.propertyIsEnumerable("x"));//     false,  x         
	//               ,  Object.property    toString  
	console.log("Object.prototype.propertyIsEnumerable('toString') = "
			+ Object.prototype.propertyIsEnumerable("toString"));//toString Object.prototype       ,      
	//  in     ,     !==undefined                        ,           in   ,             undefined   
	//                     :
	//o.x!==undefined( o      x    x     undefined      ),              undefined 
	var o = {
		x : null
	};
	console.log("o.x!==undefined = " + (o.x !== undefined));
	//o.x!=undefined o.x!=null  ( o      x    x     undefined  x     null      ),              null  undefined
	console.log("o.x!=undefined = " + (o.x != undefined));
	//    o.x,    x    ,     null,undefined,0,-0,"",false

	//        
	//    for/in  ,for/in                      (            ),            。
	//              ,                    (                        )。
	//  for/in    ,               。   Object.keys(),       ,                     。          。
	var obj = Object.create({
		x : 1,
		y : 2
	});
	obj.name = "duchao";
	obj.age = 20;
	var keys = Object.keys(Object.prototype);
	console.log(keys.toString());//   ,  Object.prototype           
	//    Object.getOwnPropertyNames(),  Object.keys()  ,                   ,          。
	var keys = Object.getOwnPropertyNames(Object.prototype);//      
	console.log(keys.toString());
	//       getter setter
	// ECMAScript5                ,       getter setter
	// getter setter       "     ",       ,              。
	//             ,javascript  getter  (   ),                   。
	//               ,javascript  setter  ,                setter  
	//       ,           。        getter setter  ,       /   ,     getter  ,          。       setter  ,          ,          undefined。
	//                              
	//                     ,          function   ,    get set,               ,      。
	var p = {
		//x y            
		x:3,
		y:4,
		//r          ,  getter setter
		get r(){return Math.sqrt(this.x*this.x+this.y*this.y)},
		set r(newValue){
			var oldValue = Math.sqrt(this.x*this.x+this.y*this.y);
			var ratio = newVlaue/oldValue;
			this.x*=ratio;
			this.y*=ratio;
		},
		//theta        ,   getter  
		get theta(){return Math.atan2(this.y,this.x);}
	};
	console.log("p.r = " + p.r);
	console.log("p.theta = " + p.theta);
	//       ,            。
	var q = Object.create(p);
	console.log("q.x = " + q.x);
	//              ,                           。
	//              
	var serialnum = {
			//              
			//$               
			$n:0,
			//     ,    
			get next(){return this.$n++},
			// n     ,                
			set next(n){
				if(n>=this.$n){
					this.$n = n;
				}
				else{
					throw "            ";
				}
			}
	};
	console.log(serialnum.next);
	console.log(serialnum.next);
	console.log(serialnum.next);
	//serialnum.next = 1;//     
	console.log(serialnum.next);
	//                   ,                          
	//     ,            ,           ,   ,      ,ECMAScript5              API,            。
	//      API         ,            ,             。
	//      API               ,        。
	//          : ,  ,   ,   。
	//             ,       setter         。             ,  ,   ,   。
	//             value,writable,enumerable,configurable,  value,     bool 
	//       get,set    value writable  ,get set    
	//    Object.getOwnPropertyDescriptor()                  。                ,  undefined
	var obj = {x:1};
	var descriptor = Object.getOwnPropertyDescriptor(obj,"x");
	for(var p in descriptor){
		console.log(p + ":" + descriptor[p]);
	}
	//                   ,    Object.getPrototypeOf()  
	var obj = Object.create({y:2});
	var descriptor = Object.getPrototypeOf(obj,"y");
	for(var p in descriptor){
		console.log(p + ":" + descriptor[p]);//      ,     
	}
	//         ,              ,     Object.defineProperty(),        ,           ,         。
	var obj = {};//       
	Object.defineProperty(obj,"x",{writable:false,enumerable:true,configurable:true});// obj x        ,    
	obj.x = 1;//   x    ,    x   ,  x    undefined
	console.log("obj.x = " + obj.x);
	//                   false   ,             configurable:true,       defineProperty   x      ,      false,    configurable false     x    defineProperty     
	Object.defineProperty(obj,"x",{value:1});
	console.log("obj.x = " + obj.x);
	console.log("Object.keys(obj) = " + Object.keys(obj).toString());//       x,  x     
	//               ,         ,         false  undefined,                    ,      ,            。
	//           ,    Object.defineProperties()  ,                 ,                 
	var obj = {};
	Object.defineProperties(obj,{
		x:{value:2},
		y:{value:3}
	});
	console.log("obj.x = " + obj.x);
	//              
	//1.          ,            ,          。
	//2.          ,                。(            TMD     ,     。。)
	var obj = {};
	Object.defineProperty(obj,"x",{writable:true});
	Object.defineProperty(obj,"x",{writable:false});
	//3.             ,       getter setter  ,            。
	//4.            ,              。
	//5.            ,           false  true,     true  false,               。
	//6.                ,        ,                   (             ,        false)
	// var        ,         ,       var  ,       undefined。。。
	global = {};
	var descriptor = Object.getOwnPropertyDescriptor(window,global);
	for(var p in descriptor){
		console.log(p + ":" + descriptor[p]);//      ,     
	}
	//                      ,window                   。。
	var obj = {x:1};
	var descriptor = Object.getOwnPropertyDescriptor(obj,"x");
	for(var p in descriptor){
		console.log(p + ":" + descriptor[p]);
	}
	// Object.defineProperty()   window        ,  TMD   
	Object.defineProperty(window,"x",{});
	var descriptor = Object.getOwnPropertyDescriptor(window,"x");
	for(var p in descriptor){
		console.log(p + ":" + descriptor[p]);
	}
	// Object.prototype      extend  ,               ,                                   ,              
	Object.defineProperty(Object.prototype,"extend",{
		writable:false,//      
		enumerable:false,//    
		configurable:false,//    
		value:function(o){
			//      ,        
			if(typeof o == 'object'){
				//            
				var names = Object.getOwnPropertyNames(o);
				for(var i=0;i<names.length;i++){
					//             
					if(names[i] in this)continue;
					//    p      
					var descriptor = Object.getOwnPropertyDescriptor(o,names[i]);
					//         ,     
					if(descriptor){
						Object.defineProperty(this,names[i],descriptor);
					}
				}
			}
		}
	});
	var o1 = {};
	Object.defineProperty(o1,"x",{value:2,configurable:true});
	var o2 = {};
	o2.extend(o1);
	console.log("o2.x = " + o2.x);
	//            ,            :  , ,    
	//           ,                    ,              Object.prototype       ,  new            prototype         ,  Object.create()               
	// ECMAScript5 ,         Object.getPrototypeOf()        , ECMAScript3          ,     o.constructor.prototype        
	var obj = {};
	var proto = Object.getPrototypeOf(Object.getPrototypeOf(obj));
	var proto = obj.constructor.prototype;
	console.log(proto);//            
	//      Object.create()          
	var proto = {x:1};
	var obj = Object.create(proto);
	console.log(proto === Object.getPrototypeOf(obj));
	console.log(proto === obj.constructor.prototype);//    obj.constructor.prototype            
	//    obj.constructor.prototype            ,                           
	//                   (       ),   isPrototypeOf()  ,    Object.prototype       ,         。
	var proto = {x:1};
	var obj = Object.create(proto);
	console.log("proto.isPrototypeOf(obj) = " + proto.isPrototypeOf(obj));
	//      ,         ,         ,           ,              ,    toString()  
	//           toString()  ,     func.call()      toString()  ,  Array toString,Function toString,Date toString,Regex toString      
	var obj = new Array();
	console.log("obj.toString() = " + obj.toString());//       
	console.log("Object.prototype.toString.call(obj) = " + Object.prototype.toString.call(obj));
	//                         ,           Object.create()             Object
	//          new       toString()          Object。。。
	function f(){}
	var obj = new f();
	console.log("Object.prototype.toString.call(obj) = " + Object.prototype.toString.call(obj));
	//           ,                       ,                    ,           js     。
	//ECMAScript5                   ,       Object.isExtensible         
	var obj = {};
	console.log(Object.isExtensible(obj));
	//              ,    Object.preventExtensions()  ,         
	var obj = {};
	Object.preventExtensions(obj);
	obj.x = 1;
	console.log("obj.x = " + obj.x);
	console.log("Object.isExtensible(obj) = " + Object.isExtensible(obj));
	//      ,             ,           。
	//     Object.seal()         ,       ,          。   Object.isSealed()        。      Object.freeze()  ,       ,      false,  getter setter   ,  Object.isFrozen()         。
	//         ,                   ,           。ECMAScript5       JSON.stringify() JSON.parse()       javascript  。
	console.log("JSON.stringify([1,2,3]) = " + JSON.stringify([1,2,3]));
	console.log("JSON.parse('[1,2,3]').toString() = " + JSON.parse("[1,2,3]").toString());
	//JSON    javscript     ,      javascript     ,    ,  ,   ,     ,true,false,null。NaN,Infinity,-Infinity       null。
	console.log("JSON.stringify(undefined) = " + JSON.stringify(undefined));
	console.log("JSON.stringify(NaN) = " + JSON.stringify(NaN));
	console.log("JSON.stringify(Infinity) = " + JSON.stringify(Infinity));
	console.log("JSON.stringify(-Infinity) = " + JSON.stringify(-Infinity));
	//               ,            
	var date = new Date();
	var dateToJson = JSON.stringify(date);
	var jsonToDate = JSON.parse(dateToJson);
	console.log("dateToJson = " + dateToJson);
	console.log("jsonToDate = " + jsonToDate);
	console.log("date.toJSON() = " + date.toJSON());
	//  ,    ,ERROR           ,  JSON.stringify                  ,              ,          。
	console.log("JSON.stringify(function f(){}) = " + JSON.stringify(function f(){}));
	console.log("JSON.stringify(function f(){}) = " + JSON.stringify(function f(){}));