一、对象的基本介绍
1、定义
JavaScript 对象是拥有属性和方法的数据
- 面向对象编程中最重要的就是对象,万物皆对象
- 代表现实中的某个事物, 是该事物在编程中的抽象
- 多个数据的集合体(封装体)
- 用于保存多个数据的容器
2、为什么使用对象?
- 集中管理多个数据
- 便于对多个数据进行统一管理
3、对象的组成:
对象是由属性和方法组成的。
属性:
- 代表现实事物的状态数据
- 由属性名和属性值组成
- 属性名都是字符串类型, 属性值是任意类型
Obj.a = "abc" // a为obj的属性
方法
- 代表现实事物的行为数据
- 是特别的属性==>属性值是函数
obj.fun = function(){} fun()
// fun为obj的属性,可以调用
4、访问对象内部数据
- 属性名: 编码简单, 但有时不能用
obj.name = "孙悟空";
- [‘属性名’]: 编码麻烦, 但通用
obj["123"] = 789;
- 当对象的属性中有连接符或者是不确定的情况使用[‘属性名’]
5、内置对象
JS中有如下三个常用的内置对象:
- Object
- Function
- Array
二、对象创建:
创建Object实例有如下两种方式:
1、构造函数
使用 new 操作符后跟 Object 构造函数,如下所示:
var person = new Object();
person.name = "Nicholas";
person.age = 29;
2、对象字面量(语法糖)
对象字面量是对象定义的一种简写形式,目的在于简化创建包含大量属性的对象的过程。
使用对象字面量,可以在创建对象时,直接指定对象中的属性
语法:{属性名:属性值,属性名:属性值....}
对象字面量的属性名可以加引号也可以不加,建议不加,如果要使用一些特殊的名字,则必须加引号。
<script type="text/javascript">
/*
* 使用对象字面量,可以在创建对象时,直接指定对象中的属性
* 语法:{属性名:属性值,属性名:属性值....}
* 对象字面量的属性名可以加引号也可以不加,建议不加,
* 如果要使用一些特殊的名字,则必须加引号
*
* 属性名和属性值是一组一组的名值对结构,
* 名和值之间使用:连接,多个名值对之间使用,隔开
* 如果一个属性之后没有其他的属性了,就不要写,
*/
var obj = {
name:"猪八戒",
age:13,
gender:"男",
test:{name:"沙僧"}
};
console.log(obj.test);
</script>
三、对象的属性增删改查
1、对象增删改查实例:
<script type="text/javascript">
/*
* 使用new关键字调用的函数,是构造函数constructor
* 构造函数是专门用来创建对象的函数
* 使用typeof检查一个对象时,会返回object
*/
var obj = new Object();
/*
* 在对象中保存的值称为属性
* 向对象添加属性
* 语法:对象.属性名 = 属性值;
*/
//向obj中添加一个name属性
obj.name = "孙悟空";
//向obj中添加一个gender属性
obj.gender = "男";
//向obj中添加一个age属性
obj.age = 18;
/*
* 读取对象中的属性
* 语法:对象.属性名
* 如果读取对象中没有的属性,不会报错而是会返回undefined
*/
console.log(obj.gender);
console.log(obj.hello);
/*
* 修改对象的属性值
* 语法:对象.属性名 = 新值
*/
obj.name = "tom";
/*
* 删除对象的属性
* 语法:delete 对象.属性名
*/
delete obj.name;
console.log(obj.age);
</script>
2、注意事项
- 如果读取对象中没有的属性,不会报错而是会返回undefined。
- 对象的属性名不强制要求遵守标识符的规范。
- JS对象的属性值,可以是任意的数据类型,甚至也可以是一个对象。
三、对象的属性名与属性值
1、属性名:
1)对象的属性名不强制要求遵守标识符的规范。但是我们使用是还是尽量按照标识符的规范去做。
2)如果要使用特殊的属性名,不能采用.
的方式来操作 需要使用另一种方式:
语法:对象["属性名"] = 属性值
读取时也需要采用这种方式。
使用[]这种形式去操作属性,更加的灵活,在[]中可以直接传递一个变量,这样变量值是多少就会读取那个属性。
2、属性值
JS对象的属性值,可以是任意的数据类型,甚至也可以是一个对象。
3、代码实例:
<script type="text/javascript">
var obj = new Object();
/*
* 向对象中添加属性
* 属性名:
* - 对象的属性名不强制要求遵守标识符的规范
* - 但是我们使用是还是尽量按照标识符的规范去做
*
*/
obj.name = "孙悟空";
/*
* 如果要使用特殊的属性名,不能采用.的方式来操作
* 需要使用另一种方式:
* 语法:对象["属性名"] = 属性值
* 读取时也需要采用这种方式
*
* 使用[]这种形式去操作属性,更加的灵活,
* 在[]中可以直接传递一个变量,这样变量值是多少就会读取那个属性
*
*/
obj["123"] = 789;
obj["nihao"] = "你好";
/*
* 属性值
* JS对象的属性值,可以是任意的数据类型
* 甚至也可以是一个对象
*/
obj.test = true;
obj.test = null;
obj.test = {};
</script>
四、for in 循环——枚举对象中的属性
1、语法:
for(var 变量 in 对象){
}
2、细节
for…in语句 对象中有几个属性,循环体就会执行几次
每次执行时,会将对象中的一个属性的名字赋值给变量
3、代码实例:
<script type="text/javascript">
var obj = {
name: "孙悟空",
age: 18,
gender: "男",
address: "花果山"
};
//枚举对象中的属性
//使用for ... in 语句
/*
* 语法:
* for(var 变量 in 对象){
*
* }
*
* for...in语句 对象中有几个属性,循环体就会执行几次
* 每次执行时,会将对象中的一个属性的名字赋值给变量
*/
for(var n in obj) {
console.log("属性名:" + n);
console.log("属性值:" + obj[n]);
}
var obj2 = {
name: "张三",
age: 20,
likes: "足球",
};
obj2.sex = "男";
obj2.wife = "赵丽颖";
obj2.wife1 = "范冰冰";
obj2.wife = "韩雪";
delete obj2.wife1;
for(item in obj2) {
console.log(item);
console.log(obj2[item]);
}
</script>
五、使用细节和注意事项:
1、对象== 与变量==的区别 :对象比较的是指向堆数据的引用指针,变量比较数据值。
2、如何判断对象是不是数组?
Array.isArray(对象);
Object.prototype.toString([]);
instance of
3、in运算符
通过该运算符可以检查一个对象中是否含有指定的属性,如果有则返回true,没有则返回false。
语法"属性名" in 对象
代码实例:
/*
* in 运算符
* - 通过该运算符可以检查一个对象中是否含有指定的属性
* 如果有则返回true,没有则返回false
* - 语法:
* "属性名" in 对象
*/
console.log("name" in obj);
3、js中没有类的概念,取而代之的是函数.
4、js本质上只有函数;没有构造函数.只有函数的构造调用
5、js中除了五类基本数据类型,其他都是对象!!
6、 对象字面量的属性名可以加引号也可以不加,建议不加,如果要使用一些特殊的
名字,则必须加引号。
7、如果读取对象中没有的属性,不会报错而是会返回undefined。
8、对象的属性名不强制要求遵守标识符的规范。
9、JS对象的属性值,可以是任意的数据类型,甚至也可以是一个对象。