typeof
typeof 对于原始数据类型的判断(除了null)以外是准确的。
对象和数组类型返回的是object。函数内部有一个[call]方法,有这个表示可以调用,会返回function。
使用构造函数new出来的原始数据类型也是Object,因为new出来的总是对象。
instanceof
instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链。
全能判断:
var toString = Object.prototype.toString;
toString.call(new Date); // [object Date]
toString.call(new String); // [object String]
toString.call(Math); // [object Math]
//Since JavaScript 1.8.5
toString.call(undefined); // [object Undefined]
toString.call(null); // [object Null]
// Object.prototype.toString() 方法会去读取toStringTag标签并把它包含在自己的返回值里。
toString.call(new Map()); // [object Map]
toString.call(Promise.resolve()); // [object promise]