js判断变量数据类型的方法主要有以下几种:
变量:
var a= 'abc', b= '123', c= undefined, d= 123, e= Number('qwe'), f= function(){}, g= [];
1、typeof方法:
用法: typeof a;
缺点:typeof g; // 'object'
2、instanceof:
用法: a instanceof 'string'; // true
g instanceof Array; // true
缺点:比如在iframe框架中,如果在子iframe中定义了一个数组,再将这个数组传递给父iframe中的一个变量,这是再次用instanceof判断数据类型时,就无效了。array属于引用型数据,在传递过程中,仅仅是引用地址的传递。每个页面的Array原生对象所引用的地址是不一样的,在子页面声明的array,所对应的构造函数,是子页面的Array对象;父页面来进行判断,使用的Array并不等于子页面的Array;
3、Object.prototype.toString.call() 或者 Object.prototype.toString.apply()方法;
两种用法相同:
Object.prototype.toString.call(a); //"[object String]"Object.prototype.toString.call(b); //"[object String]"Object.prototype.toString.call(c); //"[object Undefined]"Object.prototype.toString.call(d); //"[object Number]"Object.prototype.toString.call(e); //"[object Number]"Object.prototype.toString.call(f); //"[object Function]"Object.prototype.toString.call(g); //"[object Array]"
这也是最完美的一种方式,但是需要注意的是,对于NaN来说,它属于Number类型。