1.constructor:查看对象的构造函数
每个原型自动添加constructor属性;
for in的时候,有些属性找不到;
避免修改constructor属性;
function Arr(){};
var a1=new Arr();
alert(a1.constructor);//Aaa
var arr=[];
alert(arr.constructor);//Array
alert(arr.constructor==Array);//true
不管是自己写的函数,还是系统自带的函数,创建一个对象,系统都会自动生成一个Arr.prototype.constructor
2.hasOwnProperty():看是不是对象自身下面的属性,例下;
var arr=[];
arr.num=10;
Array.prototype.num2=20;//所有数组对象都添加了一个num2属性
alert(arr.hasOwnProperty("num"));//true num是arr独有的
alert(arr.hasOwnProperty("num"));//false num1是所有数组对象共有的
3.instanceof(运算符):
对象跟构造函数在原型链上是否有关系;
function Aaa(){}
var a1=new Aaa();
alert(a1 instanceof Aaa );//判断a1和Aaa是不是在同一个原型链上;结果弹出:true,在同一个原型链上,
alert(a1 instanceof Array );//false ,a1喝Array数组对象不在同一个原型链上,两者之间没有关系;
alert(a1 instanceof Object);//true; 对象最外层都是Object。
instanceof也可以做类型判断,例下:
var a1=[];
alert(a1 instanceof Array );//true
var a1=new Data();
alert(a1 instanceof Array );//false
4.toString():object上的方法,系统对象上都是自带的,自己写的对象都是通过原型链从Object上查到的;
var arr=[];
alert(arr.toString);//function toString(){[native code]}
function Arr(){}
var a1=new Arr();
alert(a1.toString);//function toString(){[native code]}
alert(a1.toString==Object.prototype.toString);//true
toString():把数组转化成字符串
var a1=[1,2,3];
Array.prototype.toString=function(){
return this.join('+');
}
alert(arr.toString());//'1,2,3'
toString():用来进行进制转换
var num=255;
alert(num.toString(16));//'ff'
toString()做类型判断
var arr=[];
alert( Object.prototype.toString.call(arr) ); //object Array;
alert( Object.prototype.toString.call(arr) =='[object Array]' ); //true,arr是数组
var arr={};
alert( Object.prototype.toString.call(arr) ); //object Object;
var arr=new Date();
alert( Object.prototype.toString.call(arr) ); //object Date;
var arr=new RegExp();
alert( Object.prototype.toString.call(arr) ); //object RegExp;