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] }