什么是对象
一组数据(属性)和功能(方法)的集合
属性可以是任何的数据类型,例如基本值、对象或函数。
事物的特征在对象中用属性来表示。
事物的行为在对象中用方法(函数)来表示。
创建
- 字面量表示
var obj={};
属性名直接用逗号隔开,属性名和属性值之间用冒号隔开 - 使用构造函数
var obj=new Object();
属性访问
- 点表示法
例:obj.name - 中括号表示法
例:obj[“first name”]
遍历
普通版的for只能遍历数组,无法遍历对象
增强版for…in用于遍历数组或者对象的属性
for(自定义变量名 in 数组/对象){
执行代码
}
for…in可以来枚举对象的属性
对象中有几个属性,循环体就会执行几次,每次执行时,会将对象中的一个属性名赋值给自定义的变量,
对象[自定义变量]来获取属性值
//举例:
var obj={
name:'zs',
age:18,
from:'北京'
};
for(var key in obj){
console.log('hello');//hello hello hello 循环体执行
//console.log(key); //name age from
//console.log(obj[key]); //zs 18 北京
}
删除
语法:delete 属性访问表达式
例如:delete person.name;
注意:delete只是断开了属性和宿主对象的联系,而不会操作属性中的属性,并且delete只会删除自有属性,不能删除继承属性。在销毁对象时,为了防止内存泄露,遍历对象中的属性,依次删除所有属性。
举例:
var person={
name:'zs',
age:20,
products:{name:'笔记本',price:5000},
test:function(){console.log('a');}
};
for(var key in person){
if(typeof person[key]=='object'){//判断属性是否为对象类型
for(var index in person[key]){
delete person[key][index];//遍历删除products里的属性
}
console.log(person[key]);//null
}
delete person[key];//删除person对象的属性
}
console.log(person);//null
检测属性
- in 检测某属性是否是某对象的自有属性或者是继承属性
- hasOwnProperty()检测给定的属性是否是对象的自有属性,对于继承属性将返回false
- propertyIsEnumerable() 检测给定的属性是否是该对象的自有属性,并且该属性是可枚举的,通常由JS代码创建的属性都是可枚举的,但是可以使用特殊的方法改变可枚举性。
var o = {
x:1
};
o.hasOwnProperty("x"); //true,x 为o的自有属性
o.hasOwnProperty("y"); //false,o 中不存在属性y
o.hasOwnProperty("toString"); //false,toString为继承属性
student.propertyIsEnumerable(“toString”); //false,不可枚举
Object属性及方法
constructor: //保存用户创建当前对象的函数
hasOwnProperty(propertyName); //检查给定的属性名是否是对象的自有属性,
toString(); //返回对象的字符串表示
valueOf(); //返回对象的字符串,数值,布尔值的表示。
propertyIsEnumerable(propertyName); //检查给定的属性在当前对象实例中是否存在 isPrototypeOf(object); //检查传入的对象是否是原型
toLocaleString(); //返回对象的字符串表示,该字符串与执行环境的地区对应
值传递和引用(地址)传递
- 基本数据类型变量
可以直接操作保存在变量中的实际的值
参数传递的时候传递的是实际值 - 引用数据类型的变量
不能直接操作对象的内存空间
参数传递的时候传递的是引用地址