文章目录
1. 对象的简介
1) js中的数据类型
-
String 字符串
-
Number 数值
-
Boolean 布尔值
-
Null 空值
-
Undefined 未定义
以上五种数据类型属于基本数据类型,
以后我们看到的值只要不是以上五种,全是对象
-
Object 对象
基本数据类型都是单一的值"hello" 123 true,值和值之间没有任何联系。
eg:在js中表示一个人的信息(name gender age)
var name = "孙悟空";
var gender = "男";
var age = 18;
如果使用基本数据类型的数据,我们所创建的对象都是独立,不能成为一个整体。
对象属于一种复合数据类型,在对象中可以保持多个不同数据类型的属性。
2) 对象的分类
1. 内建对象
- 由ES标准中定义的对象,在任何的ES的实现中都可以使用
比如:Math String Number Boolean Function Object……
2. 宿主对象
- 由js的运行环境提供的对象,目前来讲主要指由浏览器提供的对象
比如:BOM DOM 两组对象
eg:console.log(); 中 console是一个对象
document.write(); 中document是一个对象
这些对象我们并没有创建,是由浏览器提供的
3. 自定义对象
- 由开发人员自己创建的对象
2. 对象的基本操作
1) 创建对象
使用new关键字调用函数,是构造函数constructor
构造函数是专门用来创建对象的函数
使用typeof检查一个对象时,会返回object
var obj = new Object();//创建对象
console.log(obj);
console.log(typeof obj);
2) 添加属性
在对象中保存的值为属性
语法:对象.属性名 = 属性值
//向obj中添加一个name属性
obj.name = "齐天大圣";
//向obj中添加一个gender属性
obj.gender="男";
//向obj中添加一个age属性
obj.age=18;
3) 读取属性
语法:对象.属性名
如果读取对象中没有的属性,不会报错而是会返回undefined
console.log(obj.name); //齐天大圣
console.log(obj.hello); //undefined
4) 修改属性
语法:对象.属性名 = 新值
obj.name = "tom";
5) 删除属性
语法:delete 对象.属性
delete obj.name;
3. 属性名和属性值
1) 属性名
- 对象的属性名不强制要求遵守标识符规范,但是我们使用时还是尽量按照规范去做
任何乱七八糟的名字都可以使用
obj.name="孙悟空";
obj.var="hello";
如果要使用特殊的属性名,不能用.的方式来操作
需要使用另一种方式:
- 语法:对象[“属性名”]=属性值
读取时也需要采用这种方式
//obj.123=789;
obj["123"]=789;
console.log(obj["123"]);
obj["^&*%&%$%^$^"]="你好";
console.log(obj["^&*%&%$%^$^"]);
使用[]这种形式去操作属性,更加灵活。在[]中可以直接传递一个变量,这样的变量值是多少就会读取那个属性
obj["123"]=789;
obj["nihao"] = "你好";
var n = "123";
//var n = "nihao";
console.log(obj[n]);//789
运算符的优先级:
2) 属性值
js对象的属性值,可以是任意的数据类型
obj.test = "hello";
obj.test = 123;
obj.test = true;
obj.test = null;
obj.test = undefined;
console.log(obj.test);
甚至也可以是一个对象
//创建一个对象
var obj2 = new Object();
obj2.name="tom";
//将obj2设置为obj的属性
obj.test = obj2;
console.log(obj.test.name);
3) in运算符
- 通过该运算符检查一个对象中是否有指定的属性
如果有则返回true,没有则返回 false
语法 :
“属性名” in 对象
//检查obj中是否含有test2属性
console.log(obj.test2);
console.log("test2" in obj);
console.log("test" in obj);
console.log("name" in obj);
4. 基本数据类型和引用数据类型
js中的变量都是保存到 栈内存 中的
1) 基本数据类型
String Number Boolean Null Undefined
var a = 123;
var b = a;
a++;
console.log("a="+a);//124
console.log("b="+b);//123
它们的值是独立的。
基本数据类型的值直接在栈内存中存储,值与值之间是独立存在的,修改一个变量不会影响其他变量。
2) 引用数据类型
Object
var obj = new Object();
obj.name = "孙悟空";
var obj2 = obj;
//修改obj的name属性
obj.name = "猪八戒";
console.log(obj.name);
console.log(obj2.name);
它们的值一起改变。
对象是保持到堆内存中,每创建一个新的对象,就会在堆内存中开辟出一个新的空间,而变量保持的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象引用,当一个通过一个变量修改属性时,另一个也会受到影响。
//设置obj2为null
obj2 = null;
console.log(obj);
console.log(obj2);
链接断开了,但obj不受影响。
var c = 10;
var d = 10;
console.log(c==d); //true
var obj3 = new Object();
var obj4 = new Object();
obj3.name = "沙和尚";
obj4.name = "沙和尚";
console.log(obj3);
console.log(obj4);
console.log(obj3==obj4); //false
当比较两个基本数据类型的值时,就是比较值。 而比较两个引用数据类型的值时,是比较对象的内存地址。如果两个对象是一模一样的,但是地址不同,它也会返回false
5. 对象字面量
使用对象字面量来创建一个对象
var obj = {};
obj.name = "孙悟空";
console.log(obj.name);
使用对象字面量可以在创建对象时,可以直接指定对象中的属性
语法:{属性名:属性值,属性名:属性值……}
对象字面量的属性名可以加引号也可以不加,建议不加。如果要使用一些特殊的名字,则必须加引号。
属性名和属性值是一组一组二的名值对结构,
名和值之间使用":“连接,多个名值对之间使用”,"隔开。
如果一个属性之后没有其他属性了,就不要写","。
var obj2={
"name":"猪八戒",
age:800,
gender:"男"
test:{name:"沙和尚"}
};
console.log(obj2);