zoukankan      html  css  js  c++  java
  • 对象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
  • 相关阅读:
    网上订餐系统后台代码bug记录与解决
    vector二维数组
    力扣-树-练习题(一)
    优先队列

    并查集
    C++进制转换函数
    平衡二叉树(AVL树)定义与基本操作
    二叉查找树练习题
    树的遍历
  • 原文地址:https://www.cnblogs.com/coolqiyu/p/8120823.html
Copyright © 2011-2022 走看看