使用Object.prototype.toString.call(obj).slice(8,-1)
返回值可能是 "Null","Undefined", "Number","Boolean","String", "Object","Date","Array","RegExp", "Function","Error", "JSON","Math","Arguments"
本规范的每种内置对象都定义了 [[Class]] 内部属性的值。宿主对象的 [[Class]] 内部属性的值可以是除了 "Arguments", "Array", "Boolean", "Date", "Error", "Function", "JSON", "Math", "Number", "Object", "RegExp", "String" 的任何字符串。[[Class]] 内部属性的值用于内部区分对象的种类。注,本规范中除了通过 Object.prototype.toString ( 见 15.2.4.2) 没有提供任何手段使程序访问此值。
typeof可能会返回的值
都是字符串 "undefined" "number" "string" "boolean" "object" "function" "symbol"
instanceof
左边是一个对象 右边是一个构造函数 用来判断对象是否是构造函数的实例
MDN:instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。