遍历

  1. // 1.fon...in...
  2. let person = { name: 'Matt', age: 27, job: 'develop'};
  3. for(let i in person){
  4. console.log(i,person[i])
  5. }
  6. // "name", "Matt“
  7. // "age", 27
  8. // "job", "develop"

获取所有key、value

  1. // 获取所有key
  2. Object.keys(person) // ["name", "age", "job"],用keys()是无序的
  3. Object.getOwnPropertyNames(person) // ["name", "age", "job"],用getOwnPropertyNames()是有序的
  4. // 获取所有value
  5. Object.values(person) // ["Matt", 27, {"title": "标题"}]
  6. // 获取所有[key,value]数组
  7. Object.entries(person) // [["name", "Matt"], ["age", 27], ["job", {"title": "标题"}]]

判读是否存在某个属性

  1. let person = {
  2. name: 'Matt',
  3. age: 27,
  4. job: {
  5. title: '标题'
  6. }
  7. };
  8. // 方式一:hasOwnProperty,不会去原型上查找
  9. console.log(person.hasOwnProperty("name"));
  10. //方式二:in操作符,会去原型上查找
  11. console.log("name" in person); // true

对象解构

  1. let person = {
  2. name: 'Matt'
  3. };
  4. // 单层解构
  5. // 引用属性不存在时,返回undefined,可设置默认值避免
  6. let { name = '刘备', age = '19' } = person;
  7. console.log(name,age) // Matt 19
  8. // 嵌套解构
  9. let person = { name: 'Matt', age: 27, job: { title: '标题' }};
  10. let { job: { title }, name, age } = person;
  11. console.log(title, name, age); // "标题", "Matt", 27
  12. // 部分解构
  13. let { job: { title }, ...others } = person;
  14. console.log(title, others) // "标题", {"name": "Matt", "age": 27}

对象合并

1. Object.assign()

将多个源对象浅复制到目标对象 接收多个参数:参数1:目标对象,剩余参数:多个源对象

注意

  1. 简单类型复制值,复杂类型还是只复制引用
    1. const obj = {a:1,b:2}
    2. const res = Object.assign(obj,{c: 3}, {d: 4})
    3. 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()修改多个

对象属性简写

  1. let name = 'Matt';
  2. let person = {
  3. name
  4. };
  5. console.log(person); // { name: 'Matt' }

可计算属性

[]

  1. const label = 'city'
  2. const obj = {
  3. [label]:'test',
  4. [`${label}1`]:'test'
  5. }
  6. console.log(obj)

方法名简写

  1. let person = {
  2. sayName(name) {
  3. console.log(`My name is ${name}`);
  4. }
  5. };

删除属性

  1. const obj = {a:1,b:2}
  2. delete obj.a
  3. console.log(obj) //{ "b": 2 }