对象Object

功能分类                      

1. 创建对象

  • 把各对数自身拥有的可枚举属性复制到第一个对象并返回:obj = Object.assign(o1, o2, o3),o1=obj
    • assign会自动把非对象参数转换为对象,如数组会转换成序号为key,相应值为value的对象
  • 继承并扩展一个原型对象:obj = Object.create(protoObj, {属性对象}), obj.__proto = protoObj

2. 属性相关

  • 添加/修改一个(多个):Object.defineProperty(obj, 属性名,{一个属性描述对象})、Object.defineProperties(obj, {一个或多个属性对象})
    • 注:只会修改自身的属性,即使原型上有相同的属性,也会在自身上再添加一个
  • 获取自身拥有的属性描述,返回的是一个对象:Object.getOwnPropertyDescriptor(obj, 属性名),Object.getOwnPropertyDescriptors(obj)(所有属性的描述)
  • 获取自身拥有的属性名称(字符串)数组:Object.getOwnPropertyNames(obj)
  • 获取自身拥有的属性名称(Symbol)数组:Object.getOwnPropertySymbols(obj)
  • 根据名称判断是否拥有该属性(字符串/Symbol):Object.hasOwnProperty(属性名)
  • 判断自身的一个属性(字符串/Symbol)是否可枚举:Object.propertyIsEnumerable(属性名)
  • 获取所有可枚举属性(字符串)的名称数组:Object.keys(obj)
  • 获取所有可枚举属性(字符串)的值数组:Object.values(obj)
  • 获取所有可枚举属性(字符串)的[名称,值]数组:Object.entries(obj)

————属性描述符的说明

对象的属性描述符有两种主要形式:数据描述符和存取描述符。数据描述符是一个具有值的属性,该值可能是可写的,也可能不是可写的。访问器描述符是由getter-setter函数对描述的属性。描述符必须是这两种形式之一;不能同时是两者。(√/X:表示描述符是否有该键值)

描述符的键值 configurable enumerable value writable get set
数据描述符 X X
存取描述符 X X
意义

除writable外的其它是否可以修改,

以及该属性是否可删除

枚举,for...in,Object.keys 访问时的值 是否可写 访问时调用 设置时调用
默认值 false false undefine false undefine undefine

 3. 原型相关

设置:Object.setPrototypeOf(obj)

获取:Object.getPrototypeOf(obj)

判断是否是另一个的__proto:obj.isPrototypeOf(other)

4. 其它功能

  • 冻结使不能修改/删除属性:Object.freeze(obj)/Object.isFrozen()
  • 封闭使不能删除属性:Object.seal(obj)/Object.isSealed()
  • 禁止添加新属性:Object.preventExtensions(obj)/Object.isExtensible(obj)
  • 判断两个对象是否相同:Object.is(o1, o2)=>NaN===NaN, -0 != +0, {a:1}!={a:1}
  • toLocaleString直接调用toString:obj.toString() {k:v}返回的结果为[object Objec],其它会返回内部值
  • 返回对象原始值:obj.valueOf() === obj

es6                             

  • 变量名作为属性名:{a} =>{a:a}
  • 方法作为属性时可以省去function,且function/class等关键字可以作为方法名。obj = {class(){}}
  • 属性名表达式,[变量]会先得到变量的值,然后将其作为属性名。如果变量是一个函数的话,直接使用其toString()的字符串,而不是函数执行结果
  • 在函数里面除了this,增加了super来指向调用者的__proto__对象
  • Object.is, Object.assign, Objet.getOwnPropertyDescriptor, Object.setPrototypeOf, Object.getPrototypeOf, Object.keys, Object.values, Object.entries
posted @ 2017-12-29 23:23  huapyuan  阅读(157)  评论(0编辑  收藏  举报