在javascript中,當咱們須要知道一個變量的基本數據類型的時候能夠使用typeof,結果能夠是"undefined、"boolean"、"number"、"string"、"function"和"object",而須要檢測引用類型的時候ECMA Script提供了instanceof操做符。但二者在實際操做過程當中都將遇到一些問題,好比typeof在檢測"RegExp"類型時候返回"function",因爲Safari5以前的版本實現了call方法(ECMA-262規定內部實現了call方法的對象都應該返回"function"),因此它的結果跟其餘瀏覽器並不相同。再好比,"instanceof"操做符它與全局做用域密切相關。當頁面出現多個框架的時候,好比在第一個框架中定義一個數組,而後在第二個框架中檢測那麼就不能返回正確結果。
解決上面提到的問題則能夠使用Object.prototype.toString()方法。好比:
var value=5;
alert(Object.prototype.toString.call(value)); //[object Number]
var value=[1,3];
alert(Object.prototype.toString.call(value)); //[object Array]
var value=function(){};
alert(Object.prototype.toString.call(value)); //[object Function]
......
每一個類的內部都有一個[[class]]的屬性名而且指向它的構造函數名,當調用Object.prototype.toString()方法時,都會返回一個[object NativeConstructiorName]的字符串且原生的構造函數名與全局做用域無關。
因而,有了相應的返回字符串咱們就能夠準確的判斷變量的數據類型。