JavaScript学习笔记(贰拾肆)

98 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第16天点击查看活动详情

ES9 Object.values 和 Object.entries

1、Object.keys获取对象的所有键,返回一个由一个给定对象的自身可枚举属性组成的数组 console.log(Object.keys(school))

2、 Object.values获取对象所有的值,返回一个给定对象自身的所有可枚举属性值的数组 console.log(Object.values(school))

3 、Object.entries() (相当于遍历) 返回一个数组,其元素是给定对象自身可枚举属性的键值对。 console.log(Object.entries(school)) 属性的顺序其排列与使用 for...in循环遍历该对象时返回的顺序一致

// 声明对象
const school = {
  name: '尚硅谷',
  cities: ['北京', '开封', 'NewYrk'],
  subject: ['Heigh Math', 'Java', 'C#', 'UI']
}
// 创建 Map
const m = new Map(Object.entries(school))
console.log(m)
console.log(m.get('cities'))

4、Object.getOwnPropertyDescriptor(obj, prop)方法返回指定对象上一个自有属性对应的属性描述符。obj: 需要查找的目标对象 prop:目标对象内属性名称

5、Object.getOwnPropertyDescriptors(obj) 获取一个对象的所有自身属性

6、Object.create(proto,[propertiesObject]) proto:新创建对象的原型对象,可以是 null。 propertiesObject:可选,需要传入一个对象该对象的属性类型参照Object.defineProperties()的第二个参数。

// Object.create()方法创建一个新对象,使用现有对象来提供新创建的对象的 __proto__
const obj = Object.create(null, {
  name: {
    // 设置值
    value: '尚硅谷',
    // 属性特性
    writeable: true,
    configurable: true,
    enumerable: true
  }
})    // 返回一个带着指定的原型对象和属性的 新对象
console.log(obj)

7、Object.defineProperty() 直接在一个对象上定义新的属性或修改现有属性,并返回该对象 Object.defineProperty(obj, prop, descriptor)

应当直接在 Object 构造器对象上调用此方法,而不是在任意一个 Object 类型的实例上调用。    
在ES6中,由于 Symbol类型的特殊性,用Symbol类型的值来做对象的key与常规的定义或修改不同,
而Object.defineProperty 是定义key为Symbol的属性的方法之一   

//参数:
obj: 在其上定义或修改属性的对象。
props: 要定义或修改的属性的名称 或 symbol
descriptor: 要定义或修改的属性描述符

Object.defineProperty() 定义属性时的默认值:
    configurable  只有该属性值为 true 时,该属性描述符才能被改变。
    并且该属性可以从对应对象中删除。默认为 false。
    enumerable    只有该属性为 true ,该属性才会出现在对象的枚举属性中 
    该属性默认为 false// 描述符还具有以下可选键值:
    value 与属性关联的值。可以是任何有效的JavaScript值(数字,对象,函数等)。
    默认为 undefined.
    writable 当且仅当该属性的 writable 键值为 true 时,属性的值,也就是上面的 value,
    才能被赋值运算符改变。默认为 false

// 存取描述符还具有以下可选键值:
      get 属性的 getter 函数,如果没有 getter,则为 undefined。
      当访问该属性时,会调用此函数。执行时不传入任何参数,但是会传入 this 对象。
      (由于继承关系,这里的this并不一定是定义该属性的对象)。
      该函数的返回值会被用作属性的值。默认为 undefined。

      set 属性的 setter 函数,如果没有 setter,则为 undefined。
      当属性值被修改时,会调用此函数。
      该方法接受一个参数(也就是被赋予的新值),会传入赋值时的 this 对象。 
      默认为 undefined