• home > webfront > ECMAS > javascript >

    JavaScript Object 常用方法总结

    Author:zhoulujun@live.cn Date:

    自有属性,密封对象,冻结的对分别是什么?Object静态方法有许多,对一些常用方法做总结。把列表整理下,以方便后续复习记忆

    其实就是对 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object 注解下而已

    基本概念

    • 自有属性指的是直接赋予该对象的属性,不需要从原型链上进行查找的属性

    • 密封对象是指那些不可扩展的且所有自身属性都不可配置因而不可删除(但不一定是不可写)的对象。

      密封对象是指那些不能添加新的属性,不能删除已有属性,以及不能修改已有属性的可枚举性、可配置性、可写性,但可能可以修改已有属性的值的对象。

      • 密封一个对象会让这个对象变的不能添加新属性,且所有已有属性会变的不可配置。

      • 属性不可配置的效果就是属性变的不可删除,以及一个数据属性不能被重新定义成为访问器属性,或者反之。

      • 但属性的值仍然可以修改。

      • 尝试删除一个密封对象的属性或者将某个密封对象的属性从数据属性转换成访问器属性,结果会静默失败或抛出TypeError 异常(严格模式)。

    • 冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。

      也就是说,这个对象永远是不可变的

      • 冻结对象的所有自身属性都不可能以任何方式被修改。

      • 任何尝试修改该对象的操作都会失败,可能是静默失败,也可能会抛出异常(严格模式中)。

      • 数据属性的值不可更改,访问器属性(有getter和setter)也同样(但由于是函数调用,给人的错觉是还是可以修改这个属性)。

      • 如果一个属性的值是个对象,则这个对象中的属性是可以修改的,除非它也是个冻结对象。

    Object属性与方法

    1. Object.assign(target,source1,source2,...):合并对象,后者覆盖前者属性,浅拷贝。数组会被当做对象处理

    1. Object.create(target,propertiesObject):使用指定的原型对象及其属性去创建一个新的对象


    1. Object.keys():返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致(两者的主要区别是 一个 for-in 循环还会枚举其原型链上的属性)。

    2. Object.values():同Object.keys,此方法返回一个给定对象自己的所有可枚举属性值的数组

    3. Object.entries():同上,{ foo:'bar',baz:42 }->[['foo','bar'],['baz',42]]

    4. Object.fromEntries():上面的反过来,键值对列表转换为一个对象

    5. Object.getOwnPropertyNames():返回一个由指定对象的所有自身属性的属性名,与keys相似,但包含遍历包含不可枚举属性

    1. Object.setPrototypeOf():设置一个指定的对象的原型 ( 即, 内部[[Prototype]]属性)到另一个对象或  null

    2. Object.getPrototypeOf():返回指定对象的原型(内部[[Prototype]]属性的值,即__proto__,而非对象的prototype)。

    3. Object.prototype.isPrototypeOf():判断一个对象是否存在于另一个对象的原型链上

    1. Object.defineProperties(obj,props):直接在一个对象上定义新的属性或修改现有属性,并返回该对象。

    2. Object.defineProperty(obj,prop,descriptor):在一个对象上定义一个新属性或者修改一个对象的现有属性,并返回这个对象

    1. Object.getOwnPropertyDescriptor():一个自有属性对应的属性描述符。

    2. Object.getOwnPropertyDescriptors():获取一个对象的所有自身属性(非继承属性)的描述符。

    3. Object.getOwnPropertySymbols():返回一个给定对象自身的所有 Symbol 属性的数组。


    1. Object.is(obj1,obj2):等值判断

    1. Object.seal():封闭一个对象,阻止添加新属性并将所有现有属性标记为不可配置。当前属性的值只要原来是可写的就可以改变。

    2. Object.isSealed(),判断对象是否被密封。

    3. Object.freeze()方法可以冻结一个对象。

    4. Object.isFrozen():判断是否被冻结

    5. Object.preventExtensions()让一个对象变的不可扩展,也就是永远不能再添加新的属性

    6. Object.isExtensible():方法判断一个对象是否是可扩展的(是否可以在它上面添加新的属性)。


    1. Object.prototype.toString()

    2. Object.prototype.valueOf()





    转载本站文章《JavaScript Object 常用方法总结》,
    请注明出处:https://www.zhoulujun.cn/html/webfront/ECMAScript/js/2016_0315_7706.html