对象:属于一种复合的数据类型,在对象中可以保存多个不同数据类型的属性
一、对象的分类
1.内建对象
- 由ES标准中定义的对象,在任何的ES的实现中都可以使用
- 比如:Math String Number Function Object Boolean
2.宿主对象
- 由JS的运行环境提供的对象,目前来讲主要指由浏览器提供的对象
- 比如:BOM DOM
3.自定义对象
- 由开发人员自己创建的对象
二、创建对象
- 使用new关键字调用的函数,是构造函数constructor
构造函数是专门用来创建对象的函数 - 使用typeof检查一个对象的时候,会返回object
三、对象的增删改查
1.向对象中添加属性
- 在对象中保存的值称为属性
- 语法:对象.属性名 = 属性值;
2.读取对象中的属性
- 语法:对象.属性
- 如果读取对象中没有的属性,不会报错但会返回undefined
3.修改对象的属性
- 语法:对象.属性 = 新值
4.删除对象的属性
- 语法:delete 对象.属性名
四、属性名
- 对象的属性名不强制要求遵守标识符的规范,任何名字都可以,但是尽量遵守
- 如果使用特殊的属性名,不能采用.的方式来操作,需要使用语法:对象[“属性名”] = 属性值
五、 属性值
- 对象的属性值,可以是任意的数据类型,甚至也可以是个对象
六、 in运算符
- 通过该运算符可以检查一个对象中是否含有制定的属性,有则true,没有则false
- 语法:“属性名” in 对象
var obj = new Object();
obj.name = "一起加油鸭~";
obj["123"] = 789;
var n = "123";
console.log(obj.name);
console.log(obj[n]);
var obj2 = new Object();
obj2.name = "haha";
obj2.age = 18;
obj.test = obj2;
console.log(obj);
七、基本和引用数据类型
- JS的变量都是保存在栈内存中的,基本数据类型的值直接在栈内存中存储,值有值之间是独立存在,修改一个变量不会影响其他变量
- 对象是保存到堆内存中的,每创建一个新的对象,就会在堆内存中开辟出一个新的空间,而变量保存的是对象的内存地址(对象的引用),
如果两个变量保存的事一个对象引用,当一个变量修改属性时,另一个也会收到影响 - 当比较两个基本数据类型的值时,比较的就是比较值
而比较两个引用数据类型的时候,比较的是对象的内存地址;
var a = 10;
var b = a;
a++;
console.log(a, b);
var c = new Object();
c.name = "zhubajie";
var d = c;
var e = c;
c.name = "sunwukogh";
e = null;
console.log("c:", c, "d:", d, "e:", e);
var f = new Object();
f.name = "sunwukogh";
console.log(f == c);
八、对象字面量
- 使用对象字面量来创建一个对象
使用对象字面量,可以在创建对象式,直接指定对象中的属性- 语法:{属性名:属性值,属性名:属性值,…}
- 对象字面量的属性名可以加引号也可以不加引号,建议不加,因为其本质就是字符串
- 如果使用一些特殊的名字(比如纯符号),则必须加引号
- 属性名和属性值是一组一组的名值对结构,名和值之间用:连接,多个名值对之间使用,隔开,如果一个属性之后没有其他的属性了,就不要写
var g = {};
g.name = "hahah";
console.log(g);
var h = {
name: "hh",
age: 20,
gender: "nan",
test: {
name: "shs"
}
};
console.log(h);
九、用工厂的方式创建对象
- 使用该方法可以大批量创建对象
- 语法:
function creatObject(a,b,c,d){
// 创建一个新的对象
var obj = new Object();
// 向对象中添加属性
obj.a = a;
obj.b = b;
obj.c = c;
obj.d = function(){alert(d);};
// 将新的对象返回
return obj;
}
function creatObject(a, b, c, d) {
// 创建一个新的对象
var objc = new Object();
// 向对象中添加属性
objc.a = a;
objc.b = b;
objc.c = c;
objc.hH = function(){
console.log("d:",d);
};
// 将新的对象返回
return objc;
};
var obja = creatObject("lala", 18, "nan","111");
console.log("obja:", obja);
obja.hH();