感谢阮一峰
概览
JavaScript 原生提供Object对象(注意起首的O是大写)。
JavaScript 的所有其他对象都继承自Object对象,即那些对象都是Object的实例。
Object对象的原生方法分成两类:Object本身的静态方法与Object的实例方法。
-
静态方法:
Object.print = function(a){ console.log(a); };
-
实例方法:
所谓实例方法就是定义在Object原型对象Object.prototype上的方法。它可以被Object实例直接使用。 这段话对于新手来说很不直观,下面的代码可以很好的帮助理解:
Object.prototype.print = function(){ console.log(this); }; var a = [1,2,3]; a.print();
这里注意两段代码的区别(参数,this)
Object()与Object构造函数
Object()
Object本身就是一个函数,用于将任意值转换为对象。这个方法常用于保证某个值一定是对象。
var obj = Object();
var obj2 = Object(null);
var obj3 = Object(undefined);
obj1,obj2,obj3都是空对象。 如果Object的参数是一个对象类型,则会直接返回这个对象,不经过转换。 因此可以写一个判断变量是否为对象类型的函数。
var isObjectClass = function(variable){
return variable === Object(variable);
}
Object构造函数
var obj = new Object();
虽然用法相似,但是Object(value)与new Object(value)两者的语义是不同的,Object(value)表示将value转成一个对象,new Object(value)则表示新生成一个对象,它的值是value。
Object静态方法
只是简单的介绍
Object.keys()
var obj = {
p1: 123,
p2: 456
};
Object.keys(obj) // ["p1", "p2"]
Object.getOwnPropertyNames()
用法与上述类似,区别是
Object.getOwnPropertyNames方法还返回不可枚举的属性名。
var a = ['Hello', 'World'];
Object.keys(a) // ["0", "1"]
Object.getOwnPropertyNames(a) // ["0", "1", "length"]
Object实例方法
定义在Object.prototype上的方法称为实例方法,所有Object实例对象都继承这些方法。
*Object实例对象的方法,主要有以下六个:
Object.prototype.valueOf()//返回当前对象对应的值。
Object.prototype.toString()//返回当前对象对应的字符串形式。
Object.prototype.toLocaleString()//返回当前对象对应的本地字符串形式。
Object.prototype.hasOwnProperty()//判断某个属性是否为当前对象自身的属性,还是继承自原型对象的属性。
Object.prototype.isPrototypeOf()//判断当前对象是否为另一个对象的原型。
Object.prototype.propertyIsEnumerable()//判断某个属性是否可枚举。
对于Object.prototype.toString()方法
数组、字符串、函数、Date 对象都分别部署了自定义的toString方法,覆盖了Object.prototype.toString方法,并不会返回[object Object],因为它们都自定义了toString方法,覆盖原始方法。
Object.prototype.toString方法返回对象的类型字符串,因此可以用来判断一个值的类型。代码如下:
Object.prototype.toString.call('123');//[object String]
Object.prototype.toString.call([1,2,3]);//[object Array]
很巧妙的一个方法。