Object 对象(构造函数)的方法

Object 构造函数的方法

Object.assign()

Object.assign();经过复制一个或多个对象来建立一个新的对象。数组

语法:Object.assign(target, ...sources)函数

  • 参数: target 目标对象。 sources 源对象
  • 返回值:目标对象。
若是目标对象中的属性具备相同的键,则属性将被源对象中的属性覆盖。
  后面的源对象的属性将相似地覆盖前面的源对象的属性。
复制代码
Object.assign 方法只会拷贝源对象自身的而且可枚举的属性到目标对象。
  该方法使用源对象的[[Get]]和目标对象的[[Set]],因此它会调用相关 getter 和 setter。
  所以,它分配属性,而不只仅是复制或定义新的属性。若是合并源包含getter,这可能使其不适合将新属性合并到原型中。
  为了将属性定义(包括其可枚举性)复制到原型,应使用Object.getOwnPropertyDescriptor()和Object.defineProperty() 。
复制代码
- 注意,Object.assign 不会在那些source对象值为 null 或 undefined 的时候抛出错误。
复制代码

Object.create()

Object.create();使用指定的原型对象和属性建立一个新对象。spa

语法:Object.create(proto[, propertiesObject])prototype

  • 参数:proto 新建立对象的原型对象。 propertiesObject 可选。若是没有指定为 undefined,则是要添加到新建立对象的可枚举属性(即其自身定义的属性,而不是其原型链上的枚举属性)对象的属性描述符以及相应的属性名称。这些属性对应Object.defineProperties()的第二个参数。
  • 返回值:一个新对象,带着指定的原型对象和属性。
注意:若是propertiesObject参数是 null 或非原始包装对象,则抛出一个 TypeError 异常
复制代码

Object.defineProperty()

Object.defineProperty();给对象添加一个属性并指定该属性的配置。code

语法:Object.defineProperty(obj, prop, descriptor)对象

  • 参数:obj 要在其上定义属性的对象。 prop 要定义或修改的属性的名称。 descriptor 将被定义或修改的属性描述符。
  • 返回值:被传递给函数的对象。
该方法容许精确添加或修改对象的属性。经过赋值操做添加的普通属性是可枚举的,
  可以在属性枚举期间呈现出来(for...in 或 Object.keys 方法),这些属性的值能够被改变,也能够被删除。
  这个方法容许修改默认的额外选项(或配置)。
  默认状况下,使用 Object.defineProperty() 添加的属性值是不可修改的。
复制代码

Object.defineProperties()

Object.defineProperties();给对象添加多个属性并分别指定它们的配置。继承

语法:Object.defineProperties(obj, props)ip

  • 参数:obj 在其上定义或修改属性的对象。 props 要定义其可枚举属性或修改的属性描述符的对象。对象中存在的属性描述符主要有两种:数据描述符和访问器描述符(更多详情,请参阅Object.defineProperty())。
  • 返回值:传递给函数的对象。

Object.entries()

Object.entries();返回给定对象自身可枚举属性的 [key, value] 数组。原型链

语法:Object.entries(obj)文档

  • 参数:obj 能够返回其可枚举属性的键值对的对象。
  • 返回值:给定对象自身可枚举属性的键值对数组。
Object.entries()返回一个数组,其元素是与直接在object上找到的可枚举属性键值对相对应的数组。
  属性的顺序与经过手动循环对象的属性值所给出的顺序相同。
复制代码

Object.freeze()

** Object.freeze();冻结对象:其余代码不能删除或更改任何属性。**

语法:Object.freeze(obj)

  • 参数:obj 要被冻结的对象。
  • 返回值:被冻结的对象。
数据属性的值不可更改,访问器属性(有getter和setter)也一样(但因为是函数调用,给人的错觉是仍是能够修改这个属性)。
  若是一个属性的值是个对象,则这个对象中的属性是能够修改的,除非它也是个冻结对象。
  数组做为一种对象,被冻结,其元素不能被修改。没有数组元素能够被添加或移除。
  这个方法返回传递的对象,而不是建立一个被冻结的副本。
复制代码

Object.getOwnPropertyDescriptor()

Object.getOwnPropertyDescriptor();返回对象指定的属性配置。

语法:Object.getOwnPropertyDescriptor(obj, prop)

  • 参数:obj 须要查找的目标对象 props 目标对象内属性名称
  • 返回值:若是指定的属性存在于对象上,则返回其属性描述符对象(property descriptor),不然返回 undefined。

Object.getOwnPropertyNames()

Object.getOwnPropertyNames();返回一个数组,它包含了指定对象全部的可枚举或不可枚举的属性名。

语法:Object.getOwnPropertyNames(obj)

  • 参数:obj 一个对象,其自身的可枚举和不可枚举属性的名称被返回。
  • 返回值:在给定对象上找到的自身属性对应的字符串数组。

Object.getOwnPropertySymbols()

Object.getOwnPropertySymbols();返回一个数组,它包含了指定对象自身全部的符号属性。

语法:Object.getOwnPropertySymbols(obj)

  • 参数:obj 要返回 Symbol 属性的对象。
  • 返回值:在给定对象自身上找到的全部 Symbol 属性的数组。

Object.getPrototypeOf()

Object.getPrototypeOf();返回指定对象的原型对象。

语法:Object.getPrototypeOf(object)

  • 参数:obj 要返回其原型的对象。
  • 返回值:给定对象的原型。若是没有继承属性,则返回 null 。

Object.is()

Object.is();比较两个值是否相同。全部 NaN 值都相等(这与==和===不一样)。

语法:Object.is(value1, value2);

  • 参数:value1 第一个须要比较的值。 value2 第二个须要比较的值。
  • 返回值:表示两个参数是否相同的布尔值 。
这种相等性判断逻辑和传统的==运算不一样,==运算符会对它两边的操做数作隐式类型转换(若是它们类型不一样),
  而后才进行相等性比较,(因此才会有相似 "" == false 等于 true 的现象),但 Object.is 不会作这种类型转换。
复制代码
这与 === 运算符的断定方式也不同。=== 运算符(和== 运算符)将数字值 -0 和 +0 视为相等,并认为 Number.NaN 不等于 NaN。
复制代码

Object.isExtensible()

Object.isExtensible();判断对象是否可扩展。

语法:Object.isExtensible(obj)

  • 参数:obj 须要检测的对象
  • 返回值: 表示给定对象是否可扩展的一个Boolean 。
默认状况下,对象是可扩展的:便可觉得他们添加新的属性。以及它们的 __proto__ 属性能够被更改。
  Object.preventExtensions,Object.seal 或 Object.freeze 方法均可以标记一个对象为不可扩展(non-extensible)。
复制代码

Object.isFrozen()

Object.isFrozen();判断对象是否已经冻结。

语法:Object.freeze(obj)

  • 参数:obj 要被冻结的对象。
  • 返回值: 被冻结的对象。

Object.isSealed()

Object.isSealed();判断对象是否已经密封。

语法:Object.isSealed(obj)

  • 参数:obj要被检查的对象。
  • 返回值: 表示给定对象是否被密封的一个Boolean 。

Object.keys()

Object.keys();返回一个包含全部给定对象自身可枚举属性名称的数组。

语法:Object.keys(obj)

  • 参数:obj要返回其枚举自身属性的对象。
  • 返回值: 一个表示给定对象的全部可枚举属性的字符串数组。
Object.keys 返回一个全部元素为字符串的数组,其元素来自于从给定的object上面可直接枚举的属性。
  这些属性的顺序与手动遍历该对象属性时的一致。
复制代码

Object.preventExtensions()

Object.preventExtensions()防止对象的任何扩展。

语法:Object.preventExtensions(obj)

  • 参数:obj将要变得不可扩展的对象。
  • 返回值: 已经不可扩展的对象。

Object.seal()

Object.seal();防止其余代码删除对象的属性。

语法:Object.seal(obj)

  • 参数:obj将要被密封的对象。
  • 返回值: 被密封的对象。

Object.setPrototypeOf()

Object.setPrototypeOf();设置对象的原型(即内部 [[Prototype]] 属性)。

语法:Object.setPrototypeOf(obj, prototype)

  • 参数:obj要设置其原型的对象。prototype 该对象的新原型(一个对象 或 null).

Object.values()

Object.values();返回给定对象自身可枚举值的数组。

语法:Object.values(obj)

  • 参数:obj被返回可枚举属性值的对象。
  • 返回值:一个包含对象自身的全部可枚举属性值的数组。
Object.values()返回一个数组,其元素是在对象上找到的可枚举属性值。
  属性的顺序与经过手动循环对象的属性值所给出的顺序相同。
复制代码

总结:

  • Object.assign() 方法用于将全部可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
  • Object.create()方法建立一个新对象,使用现有的对象来提供新建立的对象的__proto__。
  • Object.defineProperties() 方法直接在一个对象上定义新的属性或修改现有属性,并返回该对象。
  • Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。
  • Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for...in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环也枚举原型链中的属性)。
  • Object.freeze() 方法能够冻结一个对象。一个被冻结的对象不再能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象。
  • Object.fromEntries() 方法把键值对列表转换为一个对象。
  • Object.getOwnPropertyDescriptor() 方法返回指定对象上一个自有属性对应的属性描述符。(自有属性指的是直接赋予该对象的属性,不须要从原型链上进行查找的属性)
  • Object.getOwnPropertyNames()方法返回一个由指定对象的全部自身属性的属性名(包括不可枚举属性但不包括Symbol值做为名称的属性)组成的数组。
  • Object.getOwnPropertySymbols() 方法返回一个给定对象自身的全部 Symbol 属性的数组。
  • Object.getPrototypeOf() 方法返回指定对象的原型(内部[[Prototype]]属性的值)。
  • Object.is() 方法判断两个值是不是相同的值。
  • Object.isExtensible() 方法判断一个对象是不是可扩展的(是否能够在它上面添加新的属性)。
  • Object.isFrozen()方法判断一个对象是否被冻结。
  • Object.isSealed() 方法判断一个对象是否被密封。
  • Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致 。
  • Object.preventExtensions()方法让一个对象变的不可扩展,也就是永远不能再添加新的属性。
  • Object.prototype 属性表示 Object 的原型对象。
  • Object.seal()方法封闭一个对象,阻止添加新属性并将全部现有属性标记为不可配置。当前属性的值只要可写就能够改变。
  • Object.setPrototypeOf() 方法设置一个指定的对象的原型 ( 即, 内部[[Prototype]]属性)到另外一个对象或 null。
  • Object.values()方法返回一个给定对象自身的全部可枚举属性值的数组,值的顺序与使用for...in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。

后续再把具体代码案例加上来吧,今天好累,写的我脑袋疼!!!

参考文档:developer.mozilla.org/zh-CN/docs/…

相关文章
相关标签/搜索