typeof运算符会返回一个字符串表示变量的类型。
主要用来判断 基本类型变量和对象。
typeof "Hello world"; // string typeof 123; // number typeof true; // boolean typeof undefined; // undefined typeof null; // object typeof {a:1}; // object typeof function(){} // function
说明:
typeof是根据变量的二进制数据前三位来表示类型的。
'000'表示object类型,而null的二进制数据全为0,所以typeof会把null判断为object类型。
toString()会返回一个表示该对象的字符串(包含对象子类型信息)。
可以用来判断内嵌对象子类型和基本类型变量。
let toString = Object.prototype.toString; toString.call([]); // '[object Array]' toString.call(new Date); // '[object Date]' toString.call(function(){}); // '[object Function]' toString.call(123); // '[object Number]' toString.call("Hello"); // '[object String]' toString.call(undefined); // '[object Undefined]' toString.call(null); // '[object Null]' toString.call(true); // '[object Boolean]'
说明:
function Foo(){} let foo = new Foo(); Object.prototype.toString.call(foo); // [object Object]
instanceof运算符 用来判断 一个对象是否是某个构造函数的实例。
[] instanceof Array; // true new Date() instanceof Date; // true let foo = new Foo(); foo instanceof Foo; // true 1 instanceof Number; // false
说明:
/** * instanceof用于判断一个对象是否是某个构造函数的实例。 * 原理:检查构造函数的prototype原型对象是否在对象的原型链上。 */ function instanceof(obj,func){ let prototype = func.prototype; let proto = Object.getPrototypeOf(obj); while(proto){ if(prototype == proto){ return true; } proto = Object.getPrototypeOf(proto); } return false; }