对象的简介
我们前面说了JS的数据类型有6种:
-
String 字符串
-
Number 数值
-
Boolean 布尔值
-
Null 空值
-
Undefined 未定义
以上这五种类型属于基本数据类型,以后我们看到的值,只要不是上面的五种,全都是对象。
- Object 对象
基本数据类型都是单一的值,“hello”、123、true,值和值之间没有任何的练习。
在JS中来表示一个人信息(name gender age)
var name = "孙悟空";
var gender = "男";
var age = 18;
对象属于一种复合的数据类型,在对下那个中可以保存多个不同数据类型的属性。
对象的分类:
- 内建对象:
- 由ES标准中定义的对象,在任何的ES的实现中都可以使用。
- 比如:Math、 String、 Number、 Boolean、 function…
- 宿主对象:
- 由JS的运行时环境提供的对象,目前来讲主要指浏览器提供的对象。
- 比如:BOM、DOM
- 自定义对象:
- 由开发人员自己创建的对象。
对象的基本操作
-
使用new关键字调用的函数,是构造函数constructor,构造函数是专门用来创建对象那个的函数。
-
在对象中保存的值成为属性,向对象中添加属性,语法:
对象.属性名 = 属性值
。
<script type="text/javascript">
var obj = new Object();
obj.name = "孙悟空";
obj.gender = "男";
obj.age = 18;
console.log(obj);
</script>
- 读取对象中的属性,语法:
对象.属性名
。
- 修改对象中的属性,语法:
对象.属性名 = 新属性值
- 删除对象中的属性,语法:
delete 对象.属性名
属性名和属性值
-
属性名:
-
对象的属性名不强制要求遵守标识符的规范,什么乱七八糟的名字都能用,但是使用的时候还是尽量遵守标识符的规范。如果要使用特殊的属性名,不能采用
.
的方式。 -
语法:
对象["属性名"] = 属性值
,读取的时候也需要采取这种方式。 -
使用
[]
这种形式去操作属性,更加灵活,在[]
中可以直接传递一个变量,这样变量值是多少就会读取那个数值。 -
obj["123"] = 789; var n = "123"; console.log(obj[n]);//也是789
-
-
属性值:
- JS对象中的属性值可以是任意的数据类型。甚至也可以是一个对象。
-
in运算符:
- 通过该运算符可以检查一个对象中是否含有指定的属性,如果有则返回true,没有则返回false。
- 语法:
"属性名" in 对象
。
基本数据类型和引用数据类型
我们说过前五种数据类型都是基本数据类型,而我们的对象是引用数据类型。
我们来看看:
-
基本数据类型是保存在栈内存中。值与值之间是独立存在的,修改一个变量不会影响其他的变量。
-
而引用数据类型是保存在堆内存中。每创建一个新的对象,就会在堆内存中开辟出一个新的空间,而变量保存的是对象的内存地址(对象的引用)。
//基本值
var a = 1;
var b = a;
a = 2;
console.log(a); //输出:2
console.log(b); //输出:1
//引用值
//变量 c 和 d 指向堆中的同一个数组
var c = [0, 1, 2];
var d = c;
c[0] = 5;
console.log(c); //输出:[5, 1, 2]
console.log(d); //输出:[5, 1, 2]
对象字面量
- 使用对象字面量来创建一个对象:
var obj = {};
obj.name = "孙悟空";
- 使用对象字面量,可以在创建对象时,直接指定对象中的属性。
语法:{属性名:属性值,属性名:属性值,属性名:属性值,....}
var obj2 = {
name:"猪八戒",
age:"28",
gender:"男"
};
- 对象字面量的属性名可以加引号可以加引号也可以不加,建议不加。但是如果要使用一些特殊的名字,则必须要加引号。
- 属性名和属性值是一组一组名值对结构,名和值之间使用
:
连接,多个名值对之间,
隔开,如果一个属性之后没有其他属性了就不要写,
了。有的浏览器会报错,而且这种错误不好找。