Object对象其实就是一组数据和功能的集合。
对象的分类:
1.内建对象:由ES标准中定义的对象。比如:Math String Number Boolean Function Object…
2.宿主对象:由JS的运行环境提供的对象,目前来讲主要是指浏览器提供的对象。比如:BOM DOM
3.自定义对象:由开发人员自己创建的对象。
一、创建对象
1、使用构造函数创建
使用new关键字调用的函数,是构造函数constuctor,构造函数是专门用来创建对象的函数
let obj=new Object()
2、使用对象字面量创建
使用对象字面量来创建一个对象:
let obj={}
使用对象字面量来创建对象时,可以直接指定对象中的属性
语法:{属性名:属性值,属性名:属性值,…}
let obj2={
name:"Tom",
age:12,
gender:"男",
test:{
name:"LiLi",
}
}
属性名和属性值
一、属性名
1.使用属性名,可以使用 . 的方式来操作
var obj=new Object()
obj.name="Tom"
2.如果使用特殊的属性名,不能使用 . 的方式操作,需要使用另一种方式:对象[“属性名”]=属性值
var obj=new Object()
obj["123"]=2345
console.log(obj["123"]);
let n="123"
console.log(obj[n]);
2.计算属性:
当创建一个对象时,我们可以在对象字面量中使用方括号。这叫做计算属性。
let fruit=prompt("which fruit to buy?","apple");
let bag={
[fruit]:5,
};
alert(bag.apple);
以下写法与上例效果相同
let fruit=prompt("which fruit to buy?","apple");
let bag={};
bag[fruit]=5;
可以在方括号中使用更复杂的表达式,如下:
let fruit="apple";
let bag={
[fruit+'Computers']:5//bag.appleComputers=5
};
属性值
属性值简写:
当属性名和变量名一样时,有一种特殊的属性值缩写的方法,可以使属性名变得更短。
function makeUser(name,age){
return{
name, //与name:name相同
age, //与age:age相同
};
}
可以把属性名简写方式和正常方式混用:
let user={
name, //与name:name相同
age:30
};
in运算符
通过该运算符可以检查一个对象中是否含有指定的属性,如果有则返回true,没有返回false。
console.log("123" in obj); //true
属性的增删改查
1.向对象添加属性
let obj=new Object()
//向obj中添加一个name属性
obj.name='Tom';
console.log(obj);
2.读取对象中的属性
如果读取对象中没有的属性,不会报错,而是会返回undefined;
console.log(obj.name);
3.修改对象中的属性
obj.name='Lilei'
console.log(obj.name);
4.删除对象中的属性
delete obj.name
基本数据类型和引用数据类型
JS中的变量都是保存到栈内存中的,基本数据类型的值直接在栈内存中存储,值与值之间都是独立存在,修改一个变量不会影响其他的变量。
对象是保存在堆内存中的,每创建一个对象,就会在堆内存中开辟出一个新的空间**。而变量保存的是对象的内存地址**(对象的引用)。如果两个变量保存的是同一个对象的引用,当一个通过一个变量修改属性时,另一个也会受到影响。
-
当比较两个基本数据类型的值,就是比较值。
-
当比较两个引用数据类型的值时,比较的是对象的内存地址。
-
如果两个对象是一模一样的,但是地址不同,它也会返回false。
let obj3=new Object()
let obj4=new Object()
obj3.name="Tom"
obj4.name="Tom"
console.log(obj3==obj4);//false
五、for…in循环
举个例子:列出user的所有属性
let user={
name:"John",
age:30,
isAdmin:true,
};
for(let key in user){
//keys
alert(key);//name,age,isAdmin
//属性键的值
alert(user[key]);
}
遍历一个对象,获取属性的顺序有“特别的顺序”:整数数学会被排序,其他属性则按照创建的顺序显示。