JS将键值转为字符串,属性是无序的 例如:
var obj = {}; obj[1]=1; //obj['1']=1; var obj={}; obj[{x:1}] = 1; //obj[{}] = 1;属性原型链 delete不会影响原型链
function foo() { } foo.prototype.z=3; obj = new foo(); obj.x=1;//动态添加 //obj.z = 3;//继承 obj.hasOwnProperty('z');//false obj.z=5; //foo.prototype.z=3; obj.hasOwnProperty('z');//true属性读写
var obj={x:1}; obj.x;//1 obj['x'];//1 obj.y;//undefined obj.y.z = 2;//error--undefined不能再定义属性 obj.y=3;//可以删除属性
delete Object.prototype;//false delete p['x']; delete p.x;var 定义的变量不能被 delete,也不能删除function
属性检测
var cat = new Object; cat.legs=4; 'legs' in cat;//true Object.defineProperty(cat,'price',{ enumerable:false,value:10000});//默认false cat.propertyIsEnumerable('price');//false cat.hasOwnProperty('price');//true if(cat.legs !== undefined) if(cat.legs != undefined)// !==undefined,or,!==null if(cat && cat.legs)// !==undefined,or,!==nullgetter,setter
var man = { age=null; get age() {} set age(){} } man.age = 100;//调用set修改原型链上的属性的值
//obj上的x Object.defineProperty(obj,x',{writable:true,configurable:true,value:100}); obj.x;//100 obj.x=500;//500属性标签:
//获取方法 Object.getOwnPropertyDescriptor({pro:true},'pro'); //value,writable,enumerable,configurable都是true //设置属性及其标签 var Person = {}; Object.defineProperty(person,'name',{ configurable:false, writable:true, enumerable:true, value:"lxf" }); //设置多个属性,用defineProperties,属性之间,隔开prototype:实现原型链
class:标识类型 Object.prototype.toString;.call() 例如:1会返回Number–>转为对象
extensible:是否可扩张,默认true Object.preventExtensions(obj);
configurable: Object.seal(obj);//将configurable设位false 判断:isSealed
Object.freeze(obj): 所有标签都false
序列化
JSON.stringfy(obj);//undefined不被序列化,NaN,Infinity会被转为null var obj JSON.parse('{"x":1}');//反序列化 序列化的自定义: var obj = { x:1, y:2, o:{ o1:1, o2:2. toJSON:finction() { return this.o1+this.o2; } } }; JSON.stringfy(obj); //{"x":1,"y":2,"o":3}