对象
js中的数据类型
- String 字符串
- Number 数值
- Boolean 布尔值
- Null 空值
- Undefined 未定义
- 以上五中数据基本数据类型
以后我们看到的值 只要不是以上五种 全都是对象(object)
Object 对象
基本数据类型的值直接在栈内存中存储
基本数据类型都是单一的值 值和值之间没有任何联系,所有的变量都是独立的不能成为一个整体
修改一个变量不会影响其他变量
对象是保存到堆内存中的,每创建一个新的对象就会在堆内存中开辟一个新的内存空间
对象属于一种复合的数据类型,在对象中可以保存多个不同的数据类型的属性
变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象引用,当一个通过变量修改属性时,另一个也会受到影响
对象的分类
-
内建对象
由ES标准中定义的对象,在任何的ES中实现都可以使用
比如:Math String Number等等 -
宿主对象
由JS的运行环境提供的对象 目前来将主要指浏览器提供的对象
比如:BOM和DOM -
自定义对象
由开发人员自己创建的对象
创建对象
使用new关键字调用函数 是构造函数constructor
构造函数是专门用来创建对象的函数
使用typeof检查一个对象时 返回值是object
var obj = new Object();
console.log(obj);
添加属性
在对象中保存的值称为属性
向对象添加属性
语法:对象.属性名 = 属性值;
obj.name = "karen";
obj.gender = "男";
obj.age = 18;
console.log(obj);
对象的属性值可以是任何的数据类型,也可以是个函数
obj.sayName = function(){
console.log("hello");
};
// 调方法
obj.sayName();
函数也可以称为对象的属性
如果一个函数作为一个对象的属性保存,那么我们称这个函数是这个对象的方法,调用这个函数就说调用对象的方法(method)
但是它只是名称上的区别 没有其他区别
属性名
- 对象的属性名不强制要求遵守标志符的规范
什么乱七八糟的名字都可以 但是我们还是要尽量遵守标志符的规范使用,做到见名知意 - 如果要使用特殊的属性名 就不能采用.的方式来操作,需要使用另一种方式
语法:对象[“属性名”] = 属性值,读取也需要同样的方式
使用[]这种方式去操作属性 更加的灵活
在[]中可以直接传递一个变量 这样变量值是多少就会读取那个属性
obj.name = "ben";
obj.var = "hello";
console.log(obj.var);
// 使用特殊的属性名 需要使用另一种方式 语法:对象["属性名"] = 属性值
obj["123"] = 789;
console.log(obj["123"]);
属性值
JS对象的属性值 可以是任意的数据类型 甚至也可以是一个对象
读取对象中的属性
语法:对象.属性名
// 如果读取对象中没有的属性 不会报错而是会返回undefined
console.log(obj.name);
console.log(obj.gender);
console.log(obj.age);
console.log(obj["123"]);
修改对象中的属性
语法:对象.属性名 = 新值
obj.name = "jack";
删除对象中的属性
语法:delete 对象.属性名
delete obj.name;
console.log(obj);