这里介绍对象原生的各类方法。数组
Object
对象的原生方法有两类:对象自己的方法与对象的实例方法。bash
所谓实例方法就是定义在Object
原型对象Object.prototype
上的方法,能够被实例直接使用。函数
Object
自己就是一个函数,能够用于将任意值转化为对象。spa
var obj = Object(1);
obj intanceof Object // true
复制代码
若是Object
方法的参数是一个对象,那么他老是返回该对象。prototype
Object
构造函数它不只能够是一个转换函数,还能够看成构造函数使用。code
var obj = new Object();
复制代码
注意,经过
var obj = new Object()
的写法生成新对象,与字面量的写法var obj = {}
是等价的。或者说,后者只是前者的一种简便写法。对象
var o1 = {a: 1};
var o2 = new Object(o1);
o1 === o2 // true
var obj = new Object(123);
obj instanceof Number // true
复制代码
虽然用法类似,可是Object(value)
和new Object(value)
二者的语义是不一样的,前者是将value
转换成一个对象,后者是生成一个新对象,可是他的值是value
。继承
Object
的静态方法Object.keys()
, Object.getOwnPropertyNames()
二者都是遍历对象的属性。通常来讲二者都是同样,接收一个对象做为参数,返回一个对象属性名的数组。只有涉及不可枚举属性时,才会有不同的结果。ip
var a = ['Hello', 'World'];
Object.keys(a) // ["0", "1"]
Object.getOwnPropertyNames(a) // ["0", "1", "length"]
复制代码
对象属性模型的相关方法原型链
Object.getOwnPropertyDescriptor()
:获取某个属性的描述对象Object.defineProperty()
:经过描述对象,定于某个属性Object.defineProperties()
:经过描述对象,定义多个属性控制对象状态的方法
Object.preventExtensions()
:防止对象扩展。Object.isExtensible()
:判断对象是否可扩展。Object.seal()
:禁止对象配置。Object.isSealed()
:判断一个对象是否可配置。Object.freeze()
:冻结一个对象。Object.isFrozen()
:判断一个对象是否被冻结。原型链相关方法
Object.create()
:该方法能够指定原型对象和属性,返回一个新的对象。Object.getPrototypeOf()
:获取对象的Prototype对象。Object
的实例方法主要有如下六个:
Object.prototype.valueof()
:返回对象对应的值Object.prototype.toString()
:返回对象对应的字符串形式Object.prototype.toLocaleString()
:返回对象对应的本地字符串形式Object.prototype.hasOwnProperty()
:判断某个属性是否为当前对象自身的属性,仍是继承自原型对象的属性。Object.prototype.isPrototypeOf()
:判断当前对象是否为另外一个对象的原型Object.prototype.propertyIsEnumerable()
:判断某个属性是否可枚举Object.prototype.toString
不一样数据类型的Object.prototype.toString方法返回值以下。
数值:返回[object Number]
。
字符串:返回[object String]
。
布尔值:返回[object Boolean]
。
undefined:返回[object Undefined]
。
null:返回[object Null]
。
数组:返回[object Array]
。
arguments 对象:返回[object Arguments]
。
函数:返回[object Function]
。
Error 对象:返回[object Error]
。
Date 对象:返回[object Date]
。
RegExp 对象:返回[object RegExp]
。
其余对象:返回[object Object]
。