Object 构造函数创建一个对象包装器。在JavaScript中,几乎所有的对象都是Object类型的实例,它们都会从Object.prototype继承属性和方法。Object构造函数为给定值创建一个对象包装器。Object构造函数,会根据给定的参数创建对象,具体有以下情况:
- 如果给定值是null或undefined,将会创建并返回一个空对象。
- 如果传进去的是一个基本类型的值,则会构造其包装类型的对象。
- 如果传进去的是引用类型的值,仍然会返回这个值,经他们复制的变量保有和源对象相同的引用地址。
当以非构造函数形式被调用时,Object的行为等同于new Object()。
var obj1 = {name:"小张"};
//等价于
var obj2 = new Object();
obj2.name = '小张';
Object 构造函数的属性:
Object.length: 值为1。
Object.prototype: 可以为所有Object类型的对象添加属性。
Object 构造函数的方法:
Object.assign(): 用于将所有可枚举属性的值从一个或多个源对象分配到目标对象并返回目标对象。Object.assign(target, ...sources),target为目标对象。
Object.create(): 使用指定的原型对象和属性创建一个新的对象。
Object.create(proto,[propertiesObject])。
- proto新创建对象的原型对象
- propertiesObject可选,该对象的属性类型参照
Object.defineProperties()
的第二个参数。如果不为undefined,该传入对象的自有可枚举属性(即自身定义的属性,而不是其原型链上的枚举属性)将为新创建的对象添加指定的属性值和对应的属性描述符。如果propertiesObject参数是null
或非原始包装对象,则抛出一个TypeError
异常。
Object.defineProperty(): 给对象添加一个属性并指定该属性的配置。详细参考:地址 。
Object.defineProperty(obj, prop, descriptor)
- obj: 要定义属性的对象
- prop: 要定义或修改的属性的名称或Symbol
- descriptor: 要定义或修改的属性描述符
Object.defineProperties(): 给对象添加多个属性并分别指定它们的配置。详细参考:地址 。
Object.entries(): 返回给定对象自身可枚举属性的[key, value]数组。
Object.keys(): 返回一个包含所有给定对象自身可枚举属性名称的数组。
Object.values(): 返回给定对象自身可枚举值的数组。
Object.freeze(): 冻结对象:其他代码不能删除或更改任何属性。
Object.isFrozen(): 判断对象是否已经冻结。
Object.isExtensible(): 判断对象是否可扩展。(针对[[prototype]]属性)
Object.preventExtensions(): 防止对象的任何扩展。
(下图第一张红色框内部分,注意看演示下图第2,3张图片Object.defineProperty()中在阻止扩展后修改configurable属性,未能删除对象obj中school的属性,原因是configurable属性扩展后修改后未发生改变(即扩展后[[prototype]]链上的属性除了value可以改变,其他不能修改))
Object.seal(): 防止其他代码删除对象的属性。封闭一个对象,阻止添加新属性并将所有现有属性标记为不可配置。当前属性的值只要原来是可写的就可以改变。
Object.isSealed(): 判断对象是否已经密封。
Object.getOwnPropertyDescriptor(): 返回对象指定的属性配置。
Object.getOwnPropertyNames(): 返回一个数组,它包含了指定对象所有的可枚举或不可枚举的属性名。
Object.getOwnPropertySymbols(): 返回一个数组,它包含了指定对象自身所有的符号属性。
Object.is(): 比较两个值是否相同。所有NaN值都相等。(这与==和===不同)。
Object.setPrototypeOf(): 设置对象的原型(即内部[[Prototype]]属性)。Object.setPrototypeOf(obj, prototype)
Object.getPrototypeOf(): 返回指定对象的原型对象。
Object实例和Object原型对象:
JavaScript中的所有对象都来自Object;所有对象从Object.prototype继承方法和属性,尽管它们可能被覆盖。例如,其他构造函数的原型将覆盖constructor属性并提供自己的toString()方法。Object原型对象的更改将传播到所有对象,除非受到这些更改的属性和方法将沿原型链进一步覆盖。
属性:
Object.prototype.constructor(): 特定的函数,用于创建一个对象的原型。
方法:
Object.prototype.hasOwnProperty():返回一个布尔值,表示某个对象是否包含指定的属性,而且此属性非原型链继承的。
Object.prototype.isPrototypeOf(): 返回一个布尔值,表示指定的对象是否在本对象的原型链中。
Object.prototype.propertyIsEnumerable(): 判断指定属性是否可枚举。
Object.prototype.toString(): 返回对象的字符串表示。
Object.prototype.toLocalString(): 直接调用toString()方法。
Object.prototype.valueOf(): 返回指定对象的原始值。