Object.prototype.toString.call()函數
判斷變量類型的全部方法中,該方法能夠說是判斷的最徹底的方法,全部的數據類型均可以判斷,在使用Object.prototype.toString.call()方法判斷變量類型時,須要判斷的變量會放在小括號內spa
var str = "abc"; Object.prototype.toString.call(str); // [object String]
打印出來的字符串中第一個是call方法所在的原型實例是object,第二個就是我咱們進行判斷的變量的數據類型,這個方法能夠判斷任何的數據類型prototype
var num= 123; Object.prototype.toString.call(num); // [object Number] var bool= true; Object.prototype.toString.call(bool); // [object Boolean] var n = null; Object.prototype.toString.call(n); // [object Null] var un = undefined; Object.prototype.toString.call(un); // [object Undefined] var func = function(){}; Object.prototype.toString.call(func); // [object Function] var obj= {}; Object.prototype.toString.call(obj); // [object Object]
以及ES6的新變量Symbol也能夠進行判斷code
var syb= Symbol("abc"); console.log(Object.prototype.toString.call(syb)); // [object Symbol]
typeofblog
typeof方法能夠說是咱們接觸的比較早的判斷變量的方法了,這個方法能夠判斷基本數據類型字符串
typeof "abc" // "string" typeof 123 // "number" typeof true // "boolean" typeof undefined// "undefined"
可是在判斷null類型時,與其餘判斷結果產生了衝突原型
typeof null // object typeof [] // object typeof {} // object
結果爲"function",也有衝突string
typeof function(){} // "function" typeof Symbol // "function"
Symbol雖然被稱爲ES6的新變量,但它自己是一個構造函數,咱們在聲明變量的時候能夠感覺到io
var syb = Symbol("abc")
Symbol後面加上了一個小括號,後面帶小括號只有在調用函數的時候呀纔回出現,並且這個地方判斷變量還有一個新的狀況console
typeof syb // "symbol"
當Symbol加入了參數時,typeof的結果就變成了"symbol"
constructor
經過變量的構造函數也能夠獲得變量的類型是什麼,可是不能判斷null和undefined,由於這兩個數據類型不能經過實例化獲得,因此不存在構造函數
[].constructor // ƒ Array() { [native code] } {}.constructor // ƒ Object() { [native code] } (123).constructor // ƒ Number() { [native code] } "abc".constructor // ƒ String() { [native code] } true.constructor // ƒ Boolean() { [native code] } function(){}.constructor // ƒ Function() { [native code] } Symbol.constructor // ƒ Function() { [native code] } Symbol("abc").constructor // ƒ Symbol() { [native code] }
這裏也要注意function(){}和Symbol的構造函數也都是f Function(){[native code]}
function(){}.constructor // ƒ Function() { [native code] } Symbol.constructor // ƒ Function() { [native code] }