一:对象的含义
对象是Js中的引用数据类型,其是一种复合数据类型,在对象中可以保存多个不同数据类型的属性。
使用typeof检查时,返回一个Object
二:对象的操作
(1)创建对象
语法一:
var obj = new Object();
语法二:
var obj = {};
(2)向对象中添加属性
语法一:
对象.属性名 = 属性值;
语法二:
对象["属性名"] = 属性值;
(3)读取对象中的属性
语法一:
对象.属性名
语法二:
对象["属性名"]
**********如果读取一个对象中没有的属性,它不会报错,而是返回一个undefined
(4)删除对象中的属性
语法一:
delete 对象.属性名
语法二:
delete 对象["属性名"]
(5)使用in检查对象中是否含有指定属性
"属性名" in 对象
**********如果在对象中含有该属性,则返回true如果没有则返回false
(6)使用对象字面量,在创建对象时直接向对象中添加属性
var obj = {
属性名:属性值,
属性名:属性值,
属性名:属性值,
属性名:属性值
}
三:基本数据类型和引用数据类型
(1)基本数据类型
String Number Boolean Null Undefined
(2)引用数据类型
Object
注意:
(1)基本的数据类型的数据,变量是直接保存的它的值,变量与变量之间是相互独立的,修改一个变量不会影响其他的变量。
Var a = 123;
Var b = a;
a++;
变量 | 值 |
b | 123 |
a | 124 |
当 a=123时,b为123,而存在栈内存的时候相互都是独立的,因此其a增加到124的时候,b不受影响。
(2)引用数据类型的数据,变量是保存的对象的引用(内存地址)。
var obj = new Object();
obj.name = "zhangsan";
var obj2 = obj;
obj.name = "lisi"
变量 | 值 |
obj2 | 0x123 |
obj | 0x123 |
在栈内存当中,对象的存储会分配一个内存地址,在堆内存当中分配了同一个内存地址,而obj中所对应的内存地址中的变量为zhangsan,而obj2为同一内存地址,因此新属性lisi会覆盖zhangsan。故,如果多个变量指向的是同一个对象,此时修改一个变量的属性,会影响其他的变量。
(3)比较两个变量时,对于基本数据类型,比较的就是值,对于引用数据类型比较的是地址,地址相同才相同