这里介绍对象原生的各种方法。
Object
对象的原生方法有两类:对象本身的方法与对象的实例方法。
所谓实例方法就是定义在Object
原型对象Object.prototype
上的方法,可以被实例直接使用。
一、Object()
Object
本身就是一个函数,可以用于将任意值转化为对象。
var obj = Object(1);
obj intanceof Object // true
复制代码
如果Object
方法的参数是一个对象,那么他总是返回该对象。
二、Object
构造函数
它不仅可以是一个转换函数,还可以当作构造函数使用。
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
的静态方法
1、Object.keys()
, Object.getOwnPropertyNames()
两者都是遍历对象的属性。一般来说两者都是一样,接收一个对象作为参数,返回一个对象属性名的数组。只有涉及不可枚举属性时,才会有不一样的结果。
var a = ['Hello', 'World'];
Object.keys(a) // ["0", "1"]
Object.getOwnPropertyNames(a) // ["0", "1", "length"]
复制代码
2、其他方法
-
对象属性模型的相关方法
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]
。