对象属于一种复合的数据类型,在对象中可以保存多个不同的数据类型的属性。
分类:
1、内建对象
由 ES 标准中定义的对象,在任何的 ES 的实现中都可以使用;
比如:Math、String、Number、Boolean、Function、Object 等。
2、宿主对象
由 JavaScript 的运行环境提供的对象,目前来讲主要指由浏览器提供的对象;
比如:BOM、DOM
3、自定义对象
由开发人员自己创建的对象
创建对象
使用 new 关键字调用的函数,是构造函数(专门用来创建对象的函数)。
var obj = new Object();
//向对象里添加属性
//语法:对象.属性名 = 属性值;
obj.name = "hu";
obj.age = 21;
//读取对象中的属性
//语法:对象.属性名;
//如果读取对象中没有的属性,会返回undefined
console.log(obj.name);//打印结果:hu
console.log(obj.age);//打印结果:21
console.log(obj.gender);//打印结果:undefined
//修改对象的属性值
//语法:对象.属性名 = 新值;
obj.name = "hu1"
//删除对象的属性
//语法: delete 对象.属性名;
delete obj.name;
使用对象字面量来创建一个对象,可以在创建时,直接指定对象中的属性,对象字面量的属性名可以加引号也可以不加建议不在,如果使用一些特殊的名字时则必须加引号。
var obj = {};
obj.name = "hu";
onj.age = 21;
//创建时直接指定对象中的属性
var obj = { name: "hu", age: 21 };
对象属性名不强制要求遵守标识符的规范,但是使用时还是尽量按照标识符的规范去做。
如果要使用特殊的属性名,不能采用 对象.属性名 的方式来操作,可以用 对象["属性名"] 来进行操作。
var obj = new Object();
obj['123'] = 456;
console.log(obj['123']);//打印结果:456
//or
var name = "123";
console.log(obj[name]);//打印结果:456
对象的属性值可以是任意的数据类型。
in 运算符,通过该运算符可以检查对象中是否含有指定的属性,有返回 true,没有返回 false。
语法:"属性名" in 对象。
对象的存储
存储机制:JavaScript 中的变量都是保存到栈内存中;
基本数据类型的值是直接在栈内存中存储,值与值之间是独立存在,修改一个变量不会影响其它的变量;
对象是保存到堆内存中的,每创建一个新的对象,就会在堆内存中开辟出一个新的空间,而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象引用,当两个变量引用的是同一个对象时(对象内存地址相同),此时修改其中一个对象的属性值时,另一个也会受到影响。