对象的定义
对象一般有两种定义方式,字面量的形式定义和构造函数的方式定义
//字面量定义对象
let title = {name:"hello"}
//构造函数的方式定义对象
let person = new Object()
对象属性的操作
使用“点”语法操作对象属性
let title = {}
//增加对象的属性
title.name = "The World Peace!"
//改变对象属性
title.name = "hello"
//查询对象属性
console.log(title.name)
使用“[]”运算符来操作属性
注意使用[]来操作属性时注意括号内的属性名必须为字符串,否则系统会认为是变量
let title = {
age:32,
country:"china"
}
//增加对象的属性,
title['name'] = "The World Peace!"
//改变对象属性
title["age"] = 55
//查询对象属性
console.log(title[name])
//变量获取
let a = "age"
console.log(title[a])
属性查看的一些方法
- 使用in来查询属性
let title = {
age:32,
country:"china"
}
console.log("age" in title)//true 输出Boolean类型
- Object.keys()、Object.values()、Object.entries()
let title = {
age:32,
country:"china"
}
console.log(Object.keys(title))//["age","country"],输出的是带有属性名的数组
console.log(Object.values(title))//[32,"china"],输出的是属性的值
console.log(Object.entries(title))//[["age",32],["country","china"]],输出的是含有属性名和属性值得数组
解构赋值操作对象
let title = {
age:32,
country:"china"
}
//通过解构赋值来获取对象的属性值
let {age country} = title
console.log(age,country)//输出 32,'china'
//通过解构复制对象
let a = {...title}
//通过解构赋值合并对象
let b = {...a, ...title}
使用Object.assign()
let a ={
name:"hellop"
}
let b = {
age:12,
show(){
console.log(this.name)
}
}
Object.assign(a,b)//合并对象
let c = Object.assign({},b)//复制对象
对象的属性特征
属性特征的种类
- value ----属性的值
- writable ---- 是否可以修改
- enumberable ---- 是否可以遍历
- configurable ---- 是否可以配置,
- 不可设置configurable为true;
- 不可设置enumerable(true为false 和 false为true均不可以);
- **不可设置writable由false为true,可设置writable由true为false**
查看属性特征的方法
Object.getOwnPropertyDescriptor(对象, 属性名)
let a ={
name:"hellop"
}
console.log(Object.getOwnPropertyDescriptor(a,"name"))
//{value: 'hellop', writable: true, enumerable: true, configurable: true}
设置属性的特征
let a ={
name:"hellop"
}
//设置对象的单个属性的特征
Object.defineProperty(a,"name",{
writable:false
})
//设置对象的多个属性的特征
Object.defineProperties(
{name:{
value:"jack"
}
}
)
Object.freeze(对象)
let a ={
name:"hellop"
}
Object.freeze(a)
console.log(Object.getOwnPropertyDescriptor(a,"name"))
//value: 'hellop', writable: false, enumerable: true, configurable: false