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();使用指定的原型对象和属性建立一个新对象。spa
语法:
Object.create(proto[, propertiesObject])
prototype
- 参数:
proto
新建立对象的原型对象。propertiesObject
可选。若是没有指定为 undefined,则是要添加到新建立对象的可枚举属性(即其自身定义的属性,而不是其原型链上的枚举属性)对象的属性描述符以及相应的属性名称。这些属性对应Object.defineProperties()的第二个参数。
- 返回值:一个新对象,带着指定的原型对象和属性。
注意:若是propertiesObject参数是 null 或非原始包装对象,则抛出一个 TypeError 异常
复制代码
Object.defineProperty();给对象添加一个属性并指定该属性的配置。code
语法:
Object.defineProperty(obj, prop, descriptor)
对象
- 参数:
obj
要在其上定义属性的对象。prop
要定义或修改的属性的名称。descriptor
将被定义或修改的属性描述符。- 返回值:被传递给函数的对象。
该方法容许精确添加或修改对象的属性。经过赋值操做添加的普通属性是可枚举的,
可以在属性枚举期间呈现出来(for...in 或 Object.keys 方法),这些属性的值能够被改变,也能够被删除。
这个方法容许修改默认的额外选项(或配置)。
默认状况下,使用 Object.defineProperty() 添加的属性值是不可修改的。
复制代码
Object.defineProperties();给对象添加多个属性并分别指定它们的配置。继承
语法:
Object.defineProperties(obj, props)
ip
- 参数:
obj
在其上定义或修改属性的对象。props
要定义其可枚举属性或修改的属性描述符的对象。对象中存在的属性描述符主要有两种:数据描述符和访问器描述符(更多详情,请参阅Object.defineProperty())。- 返回值:传递给函数的对象。
Object.entries();返回给定对象自身可枚举属性的 [key, value] 数组。原型链
语法:
Object.entries(obj)
文档
- 参数:
obj
能够返回其可枚举属性的键值对的对象。- 返回值:给定对象自身可枚举属性的键值对数组。
Object.entries()返回一个数组,其元素是与直接在object上找到的可枚举属性键值对相对应的数组。
属性的顺序与经过手动循环对象的属性值所给出的顺序相同。
复制代码
** Object.freeze();冻结对象:其余代码不能删除或更改任何属性。**
语法:
Object.freeze(obj)
- 参数:
obj
要被冻结的对象。- 返回值:被冻结的对象。
数据属性的值不可更改,访问器属性(有getter和setter)也一样(但因为是函数调用,给人的错觉是仍是能够修改这个属性)。
若是一个属性的值是个对象,则这个对象中的属性是能够修改的,除非它也是个冻结对象。
数组做为一种对象,被冻结,其元素不能被修改。没有数组元素能够被添加或移除。
这个方法返回传递的对象,而不是建立一个被冻结的副本。
复制代码
Object.getOwnPropertyDescriptor();返回对象指定的属性配置。
语法:
Object.getOwnPropertyDescriptor(obj, prop)
- 参数:
obj
须要查找的目标对象props
目标对象内属性名称- 返回值:若是指定的属性存在于对象上,则返回其属性描述符对象(property descriptor),不然返回 undefined。
Object.getOwnPropertyNames();返回一个数组,它包含了指定对象全部的可枚举或不可枚举的属性名。
语法:
Object.getOwnPropertyNames(obj)
- 参数:
obj
一个对象,其自身的可枚举和不可枚举属性的名称被返回。- 返回值:在给定对象上找到的自身属性对应的字符串数组。
Object.getOwnPropertySymbols();返回一个数组,它包含了指定对象自身全部的符号属性。
语法:
Object.getOwnPropertySymbols(obj)
- 参数:
obj
要返回 Symbol 属性的对象。- 返回值:在给定对象自身上找到的全部 Symbol 属性的数组。
Object.getPrototypeOf();返回指定对象的原型对象。
语法:
Object.getPrototypeOf(object)
- 参数:
obj
要返回其原型的对象。- 返回值:给定对象的原型。若是没有继承属性,则返回 null 。
Object.is();比较两个值是否相同。全部 NaN 值都相等(这与==和===不一样)。
语法:
Object.is(value1, value2);
- 参数:
value1
第一个须要比较的值。value2
第二个须要比较的值。- 返回值:表示两个参数是否相同的布尔值 。
这种相等性判断逻辑和传统的==运算不一样,==运算符会对它两边的操做数作隐式类型转换(若是它们类型不一样),
而后才进行相等性比较,(因此才会有相似 "" == false 等于 true 的现象),但 Object.is 不会作这种类型转换。
复制代码
这与 === 运算符的断定方式也不同。=== 运算符(和== 运算符)将数字值 -0 和 +0 视为相等,并认为 Number.NaN 不等于 NaN。
复制代码
Object.isExtensible();判断对象是否可扩展。
语法:
Object.isExtensible(obj)
- 参数:
obj
须要检测的对象- 返回值: 表示给定对象是否可扩展的一个Boolean 。
默认状况下,对象是可扩展的:便可觉得他们添加新的属性。以及它们的 __proto__ 属性能够被更改。
Object.preventExtensions,Object.seal 或 Object.freeze 方法均可以标记一个对象为不可扩展(non-extensible)。
复制代码
Object.isFrozen();判断对象是否已经冻结。
语法:
Object.freeze(obj)
- 参数:
obj
要被冻结的对象。- 返回值: 被冻结的对象。
Object.isSealed();判断对象是否已经密封。
语法:
Object.isSealed(obj)
- 参数:
obj
要被检查的对象。- 返回值: 表示给定对象是否被密封的一个Boolean 。
Object.keys();返回一个包含全部给定对象自身可枚举属性名称的数组。
语法:
Object.keys(obj)
- 参数:
obj
要返回其枚举自身属性的对象。- 返回值: 一个表示给定对象的全部可枚举属性的字符串数组。
Object.keys 返回一个全部元素为字符串的数组,其元素来自于从给定的object上面可直接枚举的属性。
这些属性的顺序与手动遍历该对象属性时的一致。
复制代码
Object.preventExtensions()防止对象的任何扩展。
语法:
Object.preventExtensions(obj)
- 参数:
obj
将要变得不可扩展的对象。- 返回值: 已经不可扩展的对象。
Object.seal();防止其余代码删除对象的属性。
语法:
Object.seal(obj)
- 参数:
obj
将要被密封的对象。- 返回值: 被密封的对象。
Object.setPrototypeOf();设置对象的原型(即内部 [[Prototype]] 属性)。
语法:
Object.setPrototypeOf(obj, prototype)
- 参数:
obj
要设置其原型的对象。prototype
该对象的新原型(一个对象 或 null).
Object.values();返回给定对象自身可枚举值的数组。
语法:
Object.values(obj)
- 参数:
obj
被返回可枚举属性值的对象。- 返回值:一个包含对象自身的全部可枚举属性值的数组。
Object.values()返回一个数组,其元素是在对象上找到的可枚举属性值。
属性的顺序与经过手动循环对象的属性值所给出的顺序相同。
复制代码