1.JavaScript的所有的其他对象都继承自Object对象,也就是说哪些对象都是Object的实例。
2.Object对象原生的方法:Object本身的方法和Object的实例方法。
(1)Object对象本身的方法(直接定义在Object对象的方法)
(下面的print方法就是直接的定义在Object对象上的方法(调用print方法即可启动网页的打印功能))
Object.print=function (o){
console.log(o);
};
(2)Object的实例方法(定义在Object原型对象Object.prototype上的方法。它可以被Object实例直接使用)
Object.prototype.print = function () {
console.log(this);
};
var obj = new Object();
obj.print(); //Object
//obj是Object的实例对象,那么obj直接继承了Object.prototype
//的属性和方法,所以obj可以直接调用print方法
3.Object()
Object本身就是一个函数,可以被当作工具方法使用,将人一直转为对象,这种方法常用于保证某个值一定是对象。
1.如果参数为空(underfunded和null),Object()返回一个空对象,
var obj=Object();
// obj instanceof Object //true
var obj01=Object(undefined);
var obj02=Object(null);
console.log(obj01 instanceof Object); //true
console.log(obj02 instanceof Object); //true
underfunded和null转为对象,得到了一个空对象obj;
instanceof运算符用来验证一个对象是否为指定构造函数的实例,true表示obj就是Object的实例
2.如果参数是原始类型里面的值,Object方法将其转为对应的包装对象的实例。
(在此只实验一种对象类型 字符串类型)
var obj=Object('fhh');
console.log(obj instanceof Object); //true
console.log(obj instanceof String); //true
3.如果Object方法的参数就是一个对象,他总是返回该对象,即不用转换,(===是数值和数据类型都相等)
var arr=[];
var obj=Object(arr);
console.log(obj===arr); //true
var arr=[];
var obj=Object(arr);
console.log(obj===arr); //true
//利用这种特点可以写一个判断变量是否为对象的函数
function isObject(value) {
return value === Object(value);
}
console.log(isObject([])); //true
console.log(isObject(true)); //false
4.Object构造函数
(构造函数的意思就是前面可以使用new命令) 主要用途就是用它来生成一个新对象(构造函数的用法和前面的方法几乎一样,)
var obj=new Object();
不同之处在于:
Object(Value):表示将value转成一个对象
new Object(value):表示生成一个对象 它的值是value
5.Object的静态方法
(静态方法就是Object对象自身的方法)
5.1Object.keysObject.getOwnPropertyNames 方法都用来遍历对象的属性。
Object.keys方法的参数是一个对象,返回一个数组,该数组的成员都是该对象自身的(不是继承)所有属性名。Object.getOwnPropertyNames 也是一样的用法,《详细见JavaScript之对象》
不同点
对于不可枚举类型的属性,只有Object.getOwnPropertyNames 方法可以返回,
Object.keys方法只可以返回可枚举的属性。
var a=['hello','world'];
console.log( Object.keys(a)); //{'0','1'}
console.log(Object.getOwnPropertyNames(a));//{'0','1','length'}
其中length属性就是不可枚举的类型,所有只出现后者方法里面
5.2计算对象属性个数的方法
var obj={
p1:123,
p2:234
};
Object.getOwnPropertyNames(obj).length; //2
console.log(Object.keys(obj).length); //2
5.3其他静态方法
详细见教程后文
6.Object的实例方法
1.Object.prototype.valueOf():返回当前对象对应的值
2.Object.prototype.toString():返回当前对象对应的字符串形式
3.Object.prototype.toLocaleString():返回当前对象对应的本地字符串形式
4.Object.prototype.hasOwnProperty():判断某个属性是否为当前对象自身的属性,还是继承自原型对象的属性
5.Object.prototype.isPrototypeOf():判断当前对象是否为另一个对象的原型,
6.Object.prototype.propertyIsEnumerable():判断某个属性是否可枚举
6.1Object.prototype.valueOf()
作用为返回一个对象的”值”,默认情况下返回对象本身。
var obj=new Object();
console.log(obj.valueOf()===obj);
valueOf方法的主要用途是,JavaScript 自动类型转换时会默认调用这个方法()
//未赋值的状态
var obj=new Object();
console.log(obj+1); //[object Object]1
//给对象赋值
var obj=new Object(1);
console.log(obj+1); //2
//自定义的valueOf方法,输出返回值3
console.log(1+obj); //4
var obj=new Object();
obj.valueOf=function () {
return 3;
};
6.2Object.prototype.toString()返回一个对象的字符串形式。该字符串说明了对象的类型(用处不大)
var o1=new Object();
console.log(o1.toString()); //[object Object]
var o2={a:1};
console.log(o2.toString()); //[object Object]
通过自定义toString方法,可以让对象在自动类型转换时,得到想要的字符串形式。
var obj=new Object();
//自定义的toString方法 返回一个字符串hello
obj.toString=function () {
return 'hello';
};
//调用
console.log(obj+' '+'world');// hello world
(数组、字符串、函数、Date 对象都分别部署了自定义的toString方法,覆盖了Object.prototype.toString方法。)
console.log([1,2,3].toString());// "1,2,3" 数组
console.log('123'.toString()) ; //"123" 字符串
console.log( (function () {
return 123;
}).toString());
/*function () {
return 123; 函数
}*/
console.log((new Date()).toString());
//Wed Apr 18 2018 13:30:11 GMT+0800
6.3toString的应用:判断数据类型(判断一个值的类型)(因为实例对象可以自定义toString方法,覆盖Object.prototype.toString方法,所以为了得到类型字符串,可以直接使用Object.prototype.toString)
var obj={};
console.log(obj.toString()); //[object Object]
//通过函数的call方法,可以在任意值上调用这个方法,来判断值的数据类型
console.log(Object.prototype.toString.call(2)); //[object Number]
console.log(Object.prototype.toString.call('hello')); //[object String]
console.log(Object.prototype.toString.call({})); //[object Object]
console.log(Object.prototype.toString.call(null)); //[object Null]
console.log(Object.prototype.toString.call(undefined)); //[object Undefined]
6.4Object.prototype.toLocaleString()
返回一个值的字符串形式
(这个方法的主要作用是留出一个接口,让各种不同的对象实现自己版本的toLocaleString,用来返回针对某些地域的特定的值。目前,主要有三个对象自定义了toLocaleString方法。)
var date=new Date();
console.log(date.toString()); //Wed Apr 18 2018 13:54:07 GMT+0800
console.log(date.toLocaleString()); //2018/4/18 下午1:54:07
6.5Object.prototype.hasOwnProperty()接受一个字符串为参数,返回一个布尔值,表示该实例对象是否具有该属性。
var obj = {
p: 123
};
obj.hasOwnProperty('p') // true
obj.hasOwnProperty('toString') // false
//p是obj对象本身的属性 所以返回true
谢谢!!