在javascript中我们通常使用typeof()来检测变量的类型,但是在一些复杂情况下typeof()就显得力不从心了,下面我们来说说typeof,constructortoString,使用这三个进行类型的检测.

typeof

  • typeof检测js中的基本类型还是可以的.

var num = 1;
typeof(num) // number
var str = 'hello';
typeof(str); // string
var bool = true;
typeof(bool); // boolean

对于undefinednull就比较特殊了,

typeof(undefined); // undefined
typeof(null); // object

对于函数、数组

function  a(){};
typeof(a); // function
var arr = [];
typeof(arr); // object

对于下面的检测就比较混乱了:

typeof new Boolean(true) === 'object';
typeof new Number(1) ==== 'object';
typeof new String("abc") === 'object';
typeof new Date() === 'object';

constructor

该函数用来查看对象的构造函数

var bool = true;
console.log(bool.constructor == Boolean);// true
var num = 1; 
console.log(num.constructor == Number); // true
var str = 'hello';
console.log(str.constructor == String); // true

这里需要注意的是:
对于 undefinednull ,不能够使用 construcor检测.

toString

使用toString检测,必须使用Object.prototype.toString(),
先来看看这个东东输出什么鬼:

console.log(Object.prototype.toString()); // [object Object]

那么如何使用toString()来进行检测呢?这里使用 call()来改变this的指向,

var bool = true;
console.log(Object.prototype.toString.call(bool)); // [object Boolean]
var num = 1;
console.log(Object.prototype.toString.call(num)); // [object Number]
var str = 'hello';
console.log(Object.prototype.toString.call(str)); // [object String]
var arr = [];
console.log(Object.prototype.toString.call(arr)); // [object Array]
var a = undefined;
console.log(Object.prototype.toString.call(a)); // [object Undefined]
var b = null;
console.log(Object.prototype.toString.call(b)); // [object Null]

可以看出 使用Object.prototype.toString.call()来检测 是比较完美的.推荐使用.

补充 instanceof

检测某个实例是否在某个对象的原型链上 原型链__proto__,

var c = [];
console.log(c instanceof Object); //true
var d = 123;  // 这些 普通类型 并不是对象
console.log(d instanceof Object); //false
var str = 'hello'; //  不是对象
console.log(str instanceof Object); //false
var num = new Number(123);
console.log(num instanceof Object);

sdbxpjzq
150 声望3 粉丝

人生就像写代码,每一次成长就是一次更新,每一次收获就是一个迭代。所以...得写好代码,写好人生(就算现在写不出好的代码,可至少有一颗迭代的心),付出才可能有回报。


下一篇 »
Ajax跨域