JavaScript对象
对象是一种复合值,它将别的类型值聚合在一下(包括对象类型)。对象可以看成属性的集合,每个属性本质都是一个键值对,属性名为字符串,也可以理解为字符串到值的映射。对象主要包括属性、方法两大部分。
除了字符串、数字、true、false、null、undefined外,其它都是对象,包括函数。
对象的创建
- 对象直接量创建
var empty ={};
var people = {name:"lhc",age:"25"};
属性名如果有空格需要加上“”,对象直接量是一个表示式,每次执行都会产生一个新的对象。
- 关键字new创建
new后面需要加构造函数。
var o = new Object();//类似 var o= {};
- Object.create()创建
Object.create是一个静态的函数,传入需要继承的原型。
var o = Object.create({name:"lhc",age:"25"});//o 继承了{name:"lhc",age:"25"}
属性的访问
javaScript提供了2种属性访问方式:“.”、“[]”。
var people = {name:"lhc",age:"25"};
console.log(people.name);//打印lhc
//这种方式类似于c和java 是比较常用的方式。可以一级级访问下去。
console.log(people[name]);//打印lhc
//类似c中数组访问方式,这种常用于属性名为变量的情况。
var s = "name";
console.log(people[s]);//打印lhc
继承
在说继承之前先看看原型,因为继承就是通过原型实现的。
每个对象中都会从原型prototype继承属性,Object.prototype是所有对象的继承源。在chrome打印对象时会看到对象中有一个proto 即是继承的对象。
一个属性在一个对象查找过程:一个对象o 查询x属性,会先在对象o中查找属性x,如果没有找到会在o的原型对象中查找,一直查找到原型对象为null为止,如果没有找到返回undefined
属性直接赋值操作,不会修改原型链上的属性,只会影响原始对象。
动态增加删除属性
javascript允许动态的增加或者删除属性,注意直接操作原始属性,不能操作继承的属性。
var people = {name:"lhc",age:"25"};
delete people.age;//删除people的age属性
people.sex = "男";//增加一个属性
检测属性
- in
判断对象中是否有属性,包括继承属性。 - hasOwnPreperty()
判断对象是否有属性,不包括继承属性。 - propertyIsEnumerable()
对象是否有属性,并且是否可以枚举。
var people = {name:"lhc",age:"25"};
var o = Object.create(people);
o.sex = "男";
console.log("name" in o);//true
console.log(o.hasOwnProperty("name"));//false
console.log(o.propertyIsEnumerable("name"));
console.log(o.hasOwnProperty("sex"));//true
console.log(o.propertyIsEnumerable("sex"));//true
枚举属性
function merge(o,p){
for(prop in p){
if(o.hasOwnProperty[props]) continue;
o[props]=p[props];
}
return o;
}
//p对象中元素合并o对象中,同名的不进行处理。