js類型檢測

在javascript中咱們一般使用typeof()來檢測變量的類型,可是在一些複雜狀況下typeof()就顯得力不從心了,下面咱們來講說typeof,constructortoString,使用這三個進行類型的檢測.javascript

typeof

  • typeof檢測js中的基本類型仍是能夠的.java

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

對於下面的檢測就比較混亂了:this

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

constructor

該函數用來查看對象的構造函數prototype

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檢測.code

toString

使用toString檢測,必須使用Object.prototype.toString(),
先來看看這個東東輸出什麼鬼:對象

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

那麼如何使用toString()來進行檢測呢?這裏使用 call()來改變this的指向,ip

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);
相關文章
相關標籤/搜索