一、对象
基本数据类型(不可变类型)
number,string boolean,null,underfined
对象(Object),对象就是js中的一种数据类型
基本数据类型都是一个一个独立的值,值与值之间不存在任何的联系,这样就导致无法在程序中来表示一些复杂的数据
对象相当于是一个容器(复合数据类型),在对象中可以存储不同类型的数据
对象中存储的数据被称为:属性,向对象中添加数据称为添加属性
向对象中添加属性:对象.属性名 = 属性值;
读取对象中的属性:对象.属性名,当我们访问一个对象中没有的属性时,不会报错而是返回underfined
删除属性:delete 对象.属性名
二、属性
属性名:对象的属性是任意值,不必须遵守标识符的规范,如果起的名字太特殊,必须采取另外的方式进行命名:对象[‘属性名’]=属性值,虽然如此,但是属性名尽量遵循标识符的规范
读取属性的第二种方式:对象[‘属性名’],这种方式读取属性更加灵活
属性值:对象的属性值可以是任意的数据类型
三、可变类型
/*
当一个变量的值被修改时,只会影响它自己,对其他变量不会产生任何影响
*/
console.log(‘a=’, a);
console.log(‘b=’, b);
/*
当我们对对象进行修改时(改对象),如果有其他的变量同时指向该对象,则也会被影响到
*/
let obj = Object();
obj.name = 'swk';
let obj2 = obj;
obj.name = 'zbj';
console.log(obj);//zbj
console.log(obj2);//zbj
/*
改变量对其他变量不会有影响
变量=xxxx
变量+=xxxx
变量++
改对象会影响到其他指向该对象的变量
变量.属性=xxx
*/
let obj3 = Object();
obj.name = '白骨精';
let obj4 = obj3;
obj3 = null;//给obj3变量重新赋值,即为改变量
console.log(obj3);//null
console.log(obj4);//白骨精,不会有变化,因为obj3改变的是改变量,对其他变量不会有影响
let obj5 = Object();//指向的是两个object
obj.name = '蜘蛛精';
let obj6 = Object();//指向的是两个object
obj6.name = '蜘蛛精';
obj5.name = '蝎子精';
console.log(obj5);//蝎子精
console.log(obj6);//蜘蛛精
比较两个对象时,无论是相等还是全等比较都是对象的内存地址
let obj = Object();
let obj2 = Object();
obj.name = 'swk';
obj2.name = 'swk';
console.log(obj);
console.log(obj2);
console.log(obj == obj2);//false
obj2 = obj;
console.log(obj == obj2);//true
// 声明常量是禁止修改变量,不会影响我们修改对象
const obj3 = Object();
obj3.name = '猪八戒';
obj3.name = '孙悟空';
console.log(obj3);//孙悟空
四、属性的枚举
let obj = Object();
obj.name = 'swk';
obj.age = 18;
obj.gender = '男';
/*检查对象中是否含有某个属性
in 运算符,用来检查对象中是否含有某个属性,有返回true,没有返回false
语法:
'属性名' in 对象
*/
console.log('name' in obj);//true
/*
for-in 用来对对象中的属性进行枚举,就是将对象中属性全都取出来
语法:
for(let 变量in 对象){
语句....
}
fot-in会执行多次,对象中有几个属性就会执行几次,每次执行都会将一个属性名赋值我们定义的变量
*/
for (let n in obj) {
console.log(n);//执行三次,因为有三个属性
console.log(n, '=', obj[n]);//对象里的属性全都取出来了,通过obj[n]
}
五、对象字面量
对象字面量,以字面量的形式来创建对象。可以使用{}来创建一个对象,使用typeof检查一个对象时,会返回’object’,字面量可以在创建对象中直接向对象中添加属性
语法:
{
属性名:属性值,
属性名:属性值,
属性名:属性值
}
let obj = {
name: 'swk',
age: 18,
gender: '男'
};
//可以进行对象的嵌套
let obj2 = {
name: 'swk',
brother: {
name: 'zbj'
}
}
console.log(obj2);
六、垃圾回收(垃圾收集 GC)
就像在生活中会产生垃圾一样,在程序运行一段时间后也会产生垃圾,程序中的垃圾会影响程序的运行速度,如果一个对象,没有任何的变量对其进行引用,那么这个对象就是垃圾对象,垃圾对象大量存在,会占用大量内存空间,导致程序速度变慢,必须要及时要将这些垃圾进行清理,但是这些垃圾对象我们不需要清理,因为在js中拥有自动的垃圾收集机制,它会将垃圾对象从内存中消除,我们要做的就是将不再使用的变量设置为null
let obj = {};
let obj2 = {};
let obj3 = {};
obj3 = null;