判斷變量的數據類型

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