遍历
// 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
// 获取所有key
Object.keys(person) // ["name", "age", "job"],用keys()是无序的
Object.getOwnPropertyNames(person) // ["name", "age", "job"],用getOwnPropertyNames()是有序的
// 获取所有value
Object.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.a
console.log(obj) //{ "b": 2 }