## Object类型 **1. 实例化对象** 所有其他对象都继承Object。 创建object实例的方式有两种: - 第一个中是使用new操作符后跟Object构造函数 ``` var person = new Object() ``` 注意:O是大写 - 第二种是使用对象字面量: ``` var person = { name: 'tg' }; ``` 访问对象属性使用的是点表示法,也可以用方括号表示法来访问。 ``` var person = { name: 'tg' }; console.log(person.name); // "tg" console.log(person['name']); // "tg" ``` 注意:如果对象属性名是不符合语法的或属性名是关键字或保留字,只能使用方括号表示法。例如: ``` var person = { "1a" : 1 }; person["1a"]; // 1 person.1a // 会报错 ``` **2、给对象添加方法** 我们可以像添加属性一样给对象添加方法: ``` var o = {}; o.test = function(){ console.log(1); } o.test(); //1 ``` **3、Object对象的静态方法** **3.1 Object.keys()、Object.getOwnPropertyNames()** ` Object.keys()`方法和`Object.getOwnPropertyNames()`方法一般用来遍历对象的属性,它们的参数都是一个对象,返回一个数组,该数组的项都是对象自身的(不是继续原型的)的所有属性名。两者的区别在于,`Object.keys()`只返回可枚举的属性,`Object.getOwnPropertyNames()`方法还返回不可枚举的属性名。 ``` var arr = ['a', 'b']; console.log(Object.keys(arr)); // ["0", "1"] console.log(Object.getOwnPropertyNames(arr)); // ["0", "1", "length"] ``` 数组的length属性是不可枚举的。 **4、Object对象的实例方法** ``` valueOf():返回当前对象对应的值,默认情况下返回对象本身。 toString():返回当前对象对应的字符串形式。 toLocaleString():返回当前对象对应的本地字符串形式。 hasOwnProperty():判断某个属性是否为当前对象自身的属性,还是继承自原型对象的属性。 如果是自身的属性,返回true,否则返回false。 isPrototypeOf():判断当前对象是否为另一个对象的原型。如果是,返回true,否则返回false。 propertyIsEnumerable():判断某个属性是否可枚举。 ``` **(1)valueOf()** `valueOf()`方法返回当前对象对应的值,默认情况下返回对象本身。 ``` var o = { name: 'tg', age: 24 }; console.log(o == o.valueOf()); // true ``` **(2)toString()** `toString()`返回当前对象对应的字符串形式。 ``` var o = { name: 'tg', age: 24 }; console.log(o.toString()); // "[object Object]" ``` **(3)hasOwnProperty()** `hasOwnProperty()`判断某个属性是否为当前对象自身的属性,还是继承自原型对象的属性。 如果是自身的属性,返回true,否则返回false。 ``` var o = { name: 'tg', age: 24 }; console.log(o.hasOwnProperty('name')); // true console.log(o.hasOwnProperty('toString')); // false ``` toString()方法是继承原型的,所以返回后false。 **(4)isPrototypeOf()** `isPrototypeOf()`方法判断当前对象是否为另一个对象的原型。如果是,返回true,否则返回false。 ``` function Test(){} var t = new Test(); console.log(Test.prototype.isPrototypeOf(t)); // true ```