这里介绍对象原生的各种方法。
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]。