Object是在javascript中一个被咱们常用的类型,并且JS中的全部对象都是继承自Object对象的。虽然说咱们平时只是简单地使用了Object对象来存储数据,并无使用到太多其余功能,可是Object对象其实包含了不少颇有用的属性和方法,尤为是ES5增长的方法,所以,本文将从最基本的介绍开始,详细说明了Object的经常使用方法和应用。javascript
建立对象java
首先咱们都知道,对象就是一组类似数据和功能的集合,咱们就是用它来模拟咱们现实世界中的对象的。那在Javascript中,建立对象的方式一般有两种方式:构造函数和对象字面量。数组
这种方式使用new关键字,接着跟上Object构造函数,再来给对象实例动态添加上不一样的属性。这种方式相对来讲比较繁琐,通常推荐使用对象字面量来建立对象。浏览器
对象字面量很好理解,使用key/value的形式直接建立对象,简洁方便。函数
这种方式直接经过花括号将对象的属性包起来,使用key/value的方式建立对象属性,每一个属性之间用逗号隔开。
注意:若是是最后一个属性,后面就不要加逗号,由于在一些旧的浏览器下会报错。prototype
无论经过哪一种方式建立了对象实例后,该实例都会拥有下面的属性和方法,下面将会一一说明。对象
constructor属性是保存当前对象的构造函数,前面的例子中,constructor保存的就是Object方法。继承
hasOwnProperty方法接收一个字符串参数,该参数表示属性名称,用来判断该属性是否在当前对象实例中,而不是在对象的原型链中。咱们来看看下面这个例子:ip
在这个例子中,首先经过定义了一个数组对象的实例arr,咱们知道数组对象实际是经过原型链继承了Object对象,而后拥有本身的一些属性,咱们经过hasOwnProperty方法判断length是arr本身的属性,而hasOwnProperty是在原型链上的属性。
hasOwnProperty方法能够和for..in结合起来获取对象本身的key。原型链
isPrototype方法接收一个对象,用来判断当前对象是否在传入的参数对象的原型链上,提及来有点抽象,咱们来看看代码。
咱们知道MyObject是继承自Object对象的,而在JS中,继承是经过prototype来实现的,因此Object的prototype一定在MyObject对象实例的原型链上。
prototypeIsEnumerable用来判断给定的属性是否能够被for..in语句给枚举出来。看下面代码:
执行这段代码输出字符串“name”,这就说明经过for…in语句能够获得obj的name这个属性,可是咱们知道,obj的属性还有不少,好比constructor,好比hasOwnPrototype等等,可是它们没有被输出,说明这些属性不能被for…in给枚举出来,能够经过propertyIsEnumerable方法来获得。
判断“constructor”是否能够被枚举,输出false说明没法被枚举出来。
toLocalString方法返回对象的字符串表示,和代码的执行环境有关。
toString用来返回对象的字符串表示。
valueOf方法返回对象的原始值,多是字符串、数值或bool值等,看具体的对象。
如代码所示,三个不一样的对象实例调用valueOf返回不一样的数据。