遍历
// 1.fon...in...let person = { name: 'Matt', age: 27, job: 'develop'};for(let i in person){console.log(i,person[i])}// "name", "Matt“// "age", 27// "job", "develop"
获取所有key、value
// 获取所有keyObject.keys(person) // ["name", "age", "job"],用keys()是无序的Object.getOwnPropertyNames(person) // ["name", "age", "job"],用getOwnPropertyNames()是有序的// 获取所有valueObject.values(person) // ["Matt", 27, {"title": "标题"}]// 获取所有[key,value]数组Object.entries(person) // [["name", "Matt"], ["age", 27], ["job", {"title": "标题"}]]
判读是否存在某个属性
let person = {name: 'Matt',age: 27,job: {title: '标题'}};// 方式一:hasOwnProperty,不会去原型上查找console.log(person.hasOwnProperty("name"));//方式二:in操作符,会去原型上查找console.log("name" in person); // true
对象解构
let person = {name: 'Matt'};// 单层解构// 引用属性不存在时,返回undefined,可设置默认值避免let { name = '刘备', age = '19' } = person;console.log(name,age) // Matt 19// 嵌套解构let person = { name: 'Matt', age: 27, job: { title: '标题' }};let { job: { title }, name, age } = person;console.log(title, name, age); // "标题", "Matt", 27// 部分解构let { job: { title }, ...others } = person;console.log(title, others) // "标题", {"name": "Matt", "age": 27}
对象合并
1. Object.assign()
将多个源对象浅复制到目标对象 接收多个参数:参数1:目标对象,剩余参数:多个源对象
注意:
- 简单类型复制值,复杂类型还是只复制引用
const obj = {a:1,b:2}const res = Object.assign(obj,{c: 3}, {d: 4})console.log(res) // {"a": 1, "b": 2, "c": 3, "d": 4}
数据属性、访问属性
对象的每个属性有数据属性和访问属性
1. 数据属性
有4个特性描述每个对象属性的行为
- Configurable:是否可以删除该对象属性,默认:true
- Enumerable:是否可以通过for-in循环该对象属性,默认:true
- Writable:该对象属性是否可以被修改,默认:true
- Value:该对象属性的实际值,默认:undefeated
2. 访问属性
有4个特性描述它们的行为
- Configurable:是否可以删除该对象属性,默认:true
- Enumerable:是否可以通过for-in循环该对象属性,默认:true
- Get:获取函数,在读取属性时调用,默认:undefeated
- Set:设置函数,在设置属性时调用,默认:undefeated
获取与修改
- Object.getOwnPropertyDescriptor() 获取一个
- Object.getOwnPropertyDescriptors() 获取多个
- Object.defineProperty() 修改一个
- Object.defineProperties()修改多个
对象属性简写
let name = 'Matt';let person = {name};console.log(person); // { name: 'Matt' }
可计算属性
[]
const label = 'city'const obj = {[label]:'test',[`${label}1`]:'test'}console.log(obj)
方法名简写
let person = {sayName(name) {console.log(`My name is ${name}`);}};
删除属性
const obj = {a:1,b:2}delete obj.aconsole.log(obj) //{ "b": 2 }
