Object本身是一个函数,可以当作工具方法使用,将任意值转为对象。这个方法常用于保证某个值一定是对象。
Object函数的参数是各种原始类型的值,转换成对象就是原始类型值对应的包装对象。
如果Object方法的参数是一个对象,它总是返回该对象,即不用转换。
利用这一点,可以写一个判断变量是否为对象的函数。
function isObject (value) {
returnvalue ===Object(value)
}
isObject([])// true
isObject(true)// false
Object不仅可以当作工具函数使用,还可以当作构造函数使用,即前面可以使用new命令。
Object构造函数的首要用途,是直接通过它来生成新对象。
注意,通过var obj = new Object()的写法生成新对象,与字面量的写法var obj = {}是等价的。或者说,后者只是前者的一种简便写法。
varo1 = {a:1}
varo2 = new Object(o1)
o1 === o2// true
var obj =new Object(123)
obj instanceof Number// true
虽然用法相似,但是Object(value)与new Object(value)两者的语义是不同的,Object(value)表示将value转成一个对象,new Object(value)则表示新生成一个对象,它的值是value。
所谓“静态方法”,是指部署在Object对象自身的方法。
1、Object.keys(),Object.getOwnPropertyNames()
对于一般的对象来说,Object.keys()和Object.getOwnPropertyNames()返回的结果是一样的。只有涉及不可枚举属性时,才会有不一样的结果。Object.keys方法只返回可枚举的属性(详见《对象属性的描述对象》一章),Object.getOwnPropertyNames方法还返回不可枚举的属性名。
由于 JavaScript 没有提供计算对象属性个数的方法,所以可以用这两个方法代替。
var obj = {p1:123,p2:456}
Object.keys(obj).length// 2
Object.getOwnPropertyNames(obj).length// 2
一般情况下,几乎总是使用Object.keys方法,遍历对象的属性。
2、其他方法
除了上面提到的两个方法,Object还有不少其他静态方法,将在后文逐一详细介绍。
(1)对象属性模型的相关方法
Object.getOwnPropertyDescriptor():获取某个属性的描述对象。
Object.defineProperty():通过描述对象,定义某个属性。
Object.defineProperties():通过描述对象,定义多个属性。
(2)控制对象状态的方法
Object.preventExtensions():防止对象扩展。
Object.isExtensible():判断对象是否可扩展。
Object.seal():禁止对象配置。
Object.isSealed():判断一个对象是否可配置。
Object.freeze():冻结一个对象。
Object.isFrozen():判断一个对象是否被冻结。
(3)原型链相关方法
Object.create():该方法可以指定原型对象和属性,返回一个新的对象。
Object.getPrototypeOf():获取对象的Prototype对象。
除了静态方法,还有不少方法定义在Object.prototype对象。它们称为实例方法,所有Object的实例对象都继承了这些方法。
1.var obj = new Object()//就是创建了一个空对象的实例
在Java中,你可能要先构造一个类,然后才能创建类的实例对象,但在JS里,Object就是系统全局对象,所以可以直接创建一个实例对象,而无须提前构造 Object.class
2.obj.color = "red"
//就是给实例对象创建一个属性,你可以随便像这样创建任何属性
在Java中,你必须在class里构造类属性,然后再继承给类的实例,然后这个类的实例才能使用这个属性而在JS中,由于Object是全局对象,则可以随意给它设置属性.