由于javascript是弱类型语言,所有有些时候对类型的判断就十分的必要.javascript中对类型判断有3种方法.
1.typeof
返回运算数的类型,有六种可能的结果:undefined,number,string,boolean,function和object.
var strval = "Thomas";
alert(typeof strval == 'string');
typeof是最基本的用法,但是它有个很要命的弱点,如果运算数的类型是自定义的或者是Array的,那返回的结果将
都是object.当然,typeof也有个好处,如果运算数未定义,那将返回undefined,而如果用constructor判断未定义
对象的类型,则会报错,因为constructor只能检查已定义变量的类型.
2.instanceof
返回一个 Boolean值,判断对象是否是指定类的一个实例.
需要注意的是下面的例子
var arr = Array("one","two","three");
alert(arr[0] instanceof String);//输出false,因为arr[0]的类型是string,它只是string类型的数据,而不是
String类型的对象.代码可以改成
var arr = Array("one","two","three");
arr[0] = new String();
alert(arr[0] instanceof String);//输出true,因为arr[0]现在是String类的一个实例.当然arr[0]现在的值是空字符串.
另外,还有一个要注意的地方,下面的代码是错误的.
var arr = Array("one","two","three");
alert(arr[0] instanceof string );//instanceof比较的是类,而string是数据类型.
如果对象是null,那么instanceof返回false.
3.constructor
构造器constructor是所有javascript对象都有的一个属性,
var strval = "Thomas";
alert(strval.constructor == String);//返回true,这于instanceof不同.
很显然,instanceof是判断实例与类型之间的关系.而constructor判断的是对象调用的哪个构造器.
总结:typeof 是对js基本数据类型的判断
instance of 是判断实例与类关系的判断
constructor 是判断实例与构造函数关系的判断
转载地址:http://blog.csdn.net/tengyang11/article/details/6461701