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,!==null
getter,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}