js对象
a. js对象都是关联数组
b. inherit();返回一个继承自原型对象p的属性的新对象
对象的方法:
创建(create) 设置(set) 查找(query) 删除(delete) 检测(test)和枚举(enumerate)
创建对象的方法:
对象直接量 关键字new es5中的Object.create()
var aa=Object.create({"x":0,"y":1})
属性的读取和修改:
1.通过 . 连接 属性不可以改变,不能在运行时更改
2.通过object['xxx']; 属性可以是变量,比如 object['xx'+a]; a可以是个变量,这样属性就不确定了,可以在运行中更改
3.查询一个没有的属性会返回undefined
4.查询一个对象的属性,如果对象不存在,就会抛出一个错误。如果查询某对象的属性,不让他报错可以这样:
var a=b&&b.c&&b.c.d;
属性的删除
1. delete只能断开宿主与宿主对象的联系,而不会去操作属性中的属性,不能删除通过变量声明或函数声明创建的全局全局对象属性,成功返回true,失败返回false
delete a.b//a不再拥有属性b
delete a['b']//a不再拥有属性b
属性的检测
1.in运算符,hasOwnProperty(),propertyIsEnumerable()
in左侧属性名,有侧是对象如果对象的自有属性或继承属性包含这个属性就返回true,否则false
var a={x:1} a.hasOwnPreperty('x');//true
propertyIsEnumerable()是hasOwnPreperty()的增强版,只有属性是可枚举的,并且属于这个对象,才返回true
2.最简单的方法!==是否为undefined
属性的枚举
1.在代码中给对象添加的所有属性都是可枚举的,在for/in中我们需要跳过一些属性
for(p in o){
if(!o.hasOwnproperty(p)) continue ;//跳过继承属性
}
for(p in o){
if(typeof o[p]==="function") continue ;//跳过方法
}
2.在es5中多了两个函数
Object.keys();//返回一个数组,这个数组由对象中可枚举的自有属性组成
Object.getOwnPropertyNames();//返回对象中所有自有属性的名称
属性getter和setter (存取器属性)
1.var 0={
a:1,//普通的数据属性
//存取器属性都是成对定义的函数
get b(){这里是函数体},
set c(){这里是函数体}
}
对象的三个属性
1.原型属性:
var p={x:1};//定义一个原型对象
var o=Object.create(p);使用这个原型创建一个对象
p.isPrototypeOf(0);//true,o继承自p
Object.prototype.isPrototypeOf(o);//p继承自Object.prototype
2.类属性
3.可扩展性 通过把对象传入Object.esExtensible()判断对象是否是可扩展的
Object.prevenExtensions()将带转换的对象作为参数传进去,就会变成不可扩展的,注意,转换成就不能转换回来了
Object.seal()不仅能够把对象设为不可扩展,而且能把其自身的的所有自有属性设为不可配置
isSealed()检测对象是否封闭
Object.freeze() 冻结,不光不可配置,而且止咳可读
Object.isFrozen() 检查对象是否冻结
对象序列化
1:JSON.stringify();//转换为JSON字符串
2::JSON.parse();//转换为对象
对象方法:
1.toString();
2.toLocaleString();
3.toJSON();
4:valueOf();