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(){}));