1. typeof 可以对基本类型做出准确的判断,但对于引用类型力不从心
var num = 1
var str = 'str'
var arr = [1,2,3]
var boo = true
var obj = new Object()
var und = undefined
var objNull = null
const sym = Symbol()
function foo() {}
console.log('***********typeof*********');
console.log(typeof num)
console.log(typeof str)
console.log(typeof arr)
console.log(typeof boo)
console.log(typeof obj)
console.log(typeof und)
console.log(typeof objNull)
console.log(typeof sym)
console.log(typeof foo)
// number
// string
// object
// boolean
// object
// undefined
// object
// symbol
// function
2 .instanceof 判断对象和构造函数在原型链上是否有关系,如果有关系,返回真,否则返回假
console.log('***********instanceof*********');
console.log( num instanceof Array)
console.log( str instanceof Array)
console.log( arr instanceof Array)
console.log( boo instanceof Array)
console.log( obj instanceof Array)
console.log( und instanceof Array)
console.log( objNull instanceof Array)
console.log( sym instanceof Array)
console.log( foo instanceof Array)
// false
// false
// true
// false
// false
// false
// false
// false
// false
3. constructor 查看对象对应的构造函数
constructor 对于null和undefined会报错
console.log('***********constructor*********');
console.log( num.constructor == Array)
console.log( str.constructor == Array)
console.log( arr.constructor == Array)
console.log( boo.constructor == Array)
console.log( obj.constructor == Array)
// console.log( und.constructor == Array)//报错
// console.log( objNull.constructor == Array)//报错
console.log( sym.constructor == Array)
console.log( foo.constructor == Array)
// false
// false
// true
// false
// false
// false
// false
// false
4. Object.prototype.toString
toString是Object原型对象上的一个方法,该方法默认返回其调用者的具体类型,更严格的讲,是 toString运行时this指向的对象类型, 返回的类型
console.log('***********Object.prototype.toString*********');
console.log(Object.prototype.toString (num))
console.log(Object.prototype.toString (str))
console.log(Object.prototype.toString (arr))
console.log(Object.prototype.toString (boo))
console.log(Object.prototype.toString (obj))
console.log(Object.prototype.toString (und))
console.log(Object.prototype.toString (objNull))
console.log(Object.prototype.toString (sym))
console.log(Object.prototype.toString (foo))
// [object Object]
// [object Object]
// [object Object]
// [object Object]
// [object Object]
// [object Object]
// [object Object]
// [object Object]
// [object Object]
console.log('***********Object.prototype.toString.call()*********');
console.log(Object.prototype.toString.call (num))
console.log(Object.prototype.toString.call (str))
console.log(Object.prototype.toString.call (arr))
console.log(Object.prototype.toString.call (boo))
console.log(Object.prototype.toString.call (obj))
console.log(Object.prototype.toString.call (und))
console.log(Object.prototype.toString.call (objNull))
console.log(Object.prototype.toString.call (sym))
console.log(Object.prototype.toString.call (foo))
// [object Number]
// [object String]
// [object Array]
// [object Boolean]
// [object Object]
// [object Undefined]
// [object Null]
// [object Symbol]
// [object Function]