什么是对象?
一组数据(属性)和功能(方法)的集合
创建对象的两种方法
1、构造函数模式
使用Object或者使用自定义构造函数来初始化对象(例如Student)
var obj = new Object();
obj.name = “terry”;
//等价于 <==>
var obj={};
obj.name=“terry”;
obj.age=12;
2、字面量模式 {}
var obj = {
name:“terry”,
age:12,
sayName:function(){
console.log("my name is ",this.name);
}
}
访问:对象属性的访问 ①:.表示法 obj.name
②【】表示法 obj[‘name’]
方法的访问 obj.sayName; //function
obj.sayName(); //方法的使用 执行函数内部内容
遍历:
普通版的for循环可以遍历数组,但无法遍历对象
增强版的for循环:
for…in…用于遍历数组或者对象的属性
for(自定义变量名 in 数组/对象){
执行代码
}
for…in可以来枚举对象的属性
对象中有几个属性,循环体就会执行几次,每次执行时,会将对象中的一个属性名赋值给自定义的变量,对象[自定义变量]来获取属性值
新增删除:
只能删除对象的自有属性,不能删除继承属性。在销毁对象时,为了防止内存泄露,遍历对象中的属性,依次删除所有属性。
delete obj[“proname”]
delete obj.sayName //从obj对象中删除sayName属性
新增
obj.newproname=”value”
修改
可以直接点表示法覆盖
检测属性*
in 检测某属性是否是某对象的自有属性或者是继承属性
hasOwnProperty() 检测给定的属性是否是对象的自有属性返回true,其他属性返回false
propertyIsEnumerable() 检测给定的属性是否是该对象的自有属性 ,可枚举属性 。自己创建的,返回true。通常由JS代码创建的属性都是可枚举的,但是可以使用特殊的方法改变可枚举性
Object属性及方法
in 检测某属性是否是某对象的自有属性或者是继承属性
Object 类型所具有的任何属性和方法也同样存在于其他对象中,任何对象继承于Object对象。Object中常用的方法:
constructor: //保存用户创建当前对象的函数
hasOwnProperty(propertyName); //检查给定的属性名是否是对象的自有属性,
toString(); //返回对象的字符串表示
valueOf(); //返回对象的字符串,数值,布尔值的表示。
propertyIsEnumerable(propertyName); //检查给定的属性在当前对象实例中是否存在
isPrototypeOf(object); //检查传入的对象是否是原型
toLocaleString(); //返回对象的字符串表示,该字符串与执行环境的地区对应
**
对象序列化和反序列化
对象序列化是指将对象的状态转换为字符串,也可以反序列化,将字符串还原为对象函数。
1.将对象的状态转换为JSON字符串
JSON.stringify() 只能序列化对象可枚举的自有属性。
2.将JSON字符串转换为对象
JSON.parse()
内存空间:堆区 栈区
栈 先进后出
堆 在堆中存放的变量位置是不确定的
基本数据类型的变量和值存放到栈区
引用数据类型变量存放在栈区,引用内存地址存放在栈区,内容存放在堆区
1.引用传递/址传递
引用数据类型使用引用传递/地址传递
不能直接操作对象的内存空间,实际上是在操作对象的引用。可以为引用类型变量添加属性和方法,也可以改变和删除其属性和方法。
var obj={
name:“zhangsan”,
age:12
}
var obj2=obj;
console.log(obj,obj2);
obj2.name=“lisi”;
console.log(obj,obj2);
值传递:不受影响
引用传递:受影响, 内存堆中的地址的值
2.值传递
基本数据类型使用值传递
var a=1;
var b=a;
console.log(a,b)
b=2;
console.log(a,b)