JavaScript 对象是拥有属性和方法的数据。
对象是什么,存储在哪里? 栈,堆 栈的数据读取,写入速度快,但是存储的内容较少 堆的读取和写入速度慢,但是存储的内容多 对象是存储在堆中, 栈中,一旦该变量不再使用时会被清理掉1 var str={ 2 // a,b,c,d这些是str的属性,属性的名字是a b c d e 3 //属性名看作key 4 // key是关键字,这个key是不能重复,是唯一的 5 // 2,2,2,1,2 这是这个属性对应的值, 6 //属性值,这个值是该属性的唯一值,value 7 a:2, 8 b:2, 9 c:1, 10 d:2, 11 e:3 12 }
键值对:
1 var obj={ 2 a:1, 3 b:2, 4 c:3 5 } 6 var obj1={a:1,b:2,c:3}; 7 console.log(obj.a); // .是什么内容下,这里是打印obj的a属性的值 8 obj.d=obj.a+obj.b; 9 console.log(obj.d); // 创建设置d属性,他的值是obj的a属性值和b属性值的和引用地址就是指堆中对象存储的地址:
1 var o={a:1}; 2 var o1=o;//将o对象的引用地址赋值给o1 3 o1.a=10;//因为o1和o是同一个对象,因此修改o1的属性就相当于修改了o的属性 4 console.log(o); 5 6 7 8 var o={a:1}; 9 var o1=o; 10 o={b:2};//重新改变新地址 11 o.a=20; 12 console.log(o1);//a:1 13 console.log(o);//a: 20 b: 2内存泄漏 对象的引用列表中变量并没有清除掉引用关系,因此就不会被垃圾回收车回收:
1 var obj={a:1}; 2 obj=3; 3 //{a:1} 的引用列表中任然是obj 4 // obj已经是新的值3了,于是没有任何方法再获取{a:1}; 5 // 这个对象也不会被垃圾回收车回收 6 7 obj=null;//在{a:1}的引用地址中删除了obj的引用 8 obj=3;//重新给obj赋值3 9 // 当内存占用达到一定的时候,就会有一个垃圾回收车将所有堆中没有引用关系的对象回收掉 10 11 12 var obj1={a:1}; 13 var obj2={a:1}; 14 // 当使用{a:1} 这就是在堆中创建了一个新的对象,就会有一个新的引用地址 15 // 上面使用两个{a:1},这就相当于分别创建了两个新对象,他们的引用地址是不相同的 16 console.log(obj1==obj2);//false