构造函数
-
直接使用大括号构造,如:
{key1: value1, key2: value2}
-
使用构造函数,如:
new Object([value])
- 如果给定值是
null
或undefined
,将会创建并返回一个空对象 - 如果传进去的是一个基本类型的值,则会构造其包装类型的对象
- 如果传进去的是引用类型的值,仍然会返回这个值,经他们复制的变量保有和源对象相同的引用地址
- 如果给定值是
- 当以非构造函数形式被调用时,
Object
的行为等同于new Object()
静态方法
-
Object.assign(target, …sources)
将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象 -
Object.create(proto[, propertiesObject])
使用指定的原型对象创建一个新对象 -
Object.is(value1, value2)
比较两个值是否相同。所有 NaN 值都相等,但 +0 和 -0 不相等 -
Object.defineProperty(obj, prop, descriptor)
直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象const object1 = {}; Object.defineProperty(object1, 'property1', { value: 42, writable: false }); object1.property1 = 77; // throws an error in strict mode console.log(object1.property1); // expected output: 42
-
Object.defineProperties(obj, props)
直接在一个对象上定义新的属性或修改现有属性,并返回该对象var obj = {}; Object.defineProperties(obj, { 'property1': { value: true, writable: true }, 'property2': { value: 'Hello', writable: false } // etc. etc. });
-
Object.entries(obj)
返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for…in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环还会枚举原型链中的属性) -
Object.keys(obj)
返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致 -
Object.values(obj)
返回一个给定对象自身的所有可枚举属性值的数组,值的顺序与使用for...in
循环的顺序相同 ( 区别在于for-in
循环枚举原型链中的属性 ) -
Object.getOwnPropertyDescriptor(obj, prop)
返回指定对象上一个自有属性对应的属性描述符。(自有属性指的是直接赋予该对象的属性,不需要从原型链上进行查找的属性) -
Object.getOwnPropertyNames(obj)
返回一个数组,它包含了指定对象所有的可枚举或不可枚举的属性名 -
Object.getOwnPropertySymbols(obj)
返回一个给定对象自身的所有 Symbol 属性的数组 -
Object.getPrototypeOf(obj)
返回指定对象的原型对象 -
Object.setPrototypeOf(obj, prototype)
设置一个指定的对象的原型 ( 即, 内部[[Prototype]]属性)到另一个对象或null
警告: 由于现代 JavaScript 引擎优化属性访问所带来的特性的关系,更改对象的 [[Prototype]]在各个浏览器和 JavaScript 引擎上都是一个很慢的操作。其在更改继承的性能上的影响是微妙而又广泛的,这不仅仅限于 obj.__proto__ = … 语句上的时间花费,而且可能会延伸到任何代码,那些可以访问任何[[Prototype]]已被更改的对象的代码。如果你关心性能,你应该避免设置一个对象的 [[Prototype]]。相反,你应该使用 Object.create()来创建带有你想要的[[Prototype]]的新对象
-
Object.freeze(obj)
冻结对象:其他代码不能删除或更改任何属性 -
Object.isFrozen(obj)
判断对象是否已经冻结 -
Object.preventExtensions(obj)
让一个对象变的不可扩展,也就是永远不能再添加新的属性 -
Object.isExtensible(obj)
判断一个对象是否是可扩展的(是否可以在它上面添加新的属性) -
Object.seal(obj)
封闭一个对象,阻止添加新属性并将所有现有属性标记为不可配置。当前属性的值只要原来是可写的就可以改变 -
Object.isSealed(obj)
判断对象是否已经密封
实例方法
-
Object.prototype.valueOf()
返回指定对象的原始值
-
Object.prototype.toString()
返回一个表示该对象的字符串
-
Object.prototype.toLocaleString()
返回一个该对象的字符串表示。此方法被用于派生对象为了特定语言环境的目的(locale-specific purposes)而重载使用
-
Object.prototype.hasOwnProperty(prop)
返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是,是否有指定的键)。prop为要检测的属性的 String 字符串形式表示的名称,或者 Symbol
-
Object.prototype.isPrototypeOf(obj)
测试该对象是否存在于另一个对象的原型链上
-
Object.prototype.propertyIsEnumerable(prop)
返回一个布尔值,表示指定的属性是否可枚举