javascript中typeof和instanceof

typeof:返回值是一个字符串,一般只能返回以下结果

number、string、object、boolean、undefined、function、symbol

TypeResult
Undefined "undefined"
Null "object" (see below)
Boolean "boolean"
Number "number"
String "string"
Symbol (new in ECMAScript 2015) "symbol"
Host object (provided by the JS environment) Implementation-dependent
Function object (implements [[Call]] in ECMA-262 terms) "function"
Any other object "object"
  1 // Numbers
  2 typeof 37 === 'number';
  3 typeof 3.14 === 'number';
  4 typeof(42) === 'number';
  5 typeof Math.LN2 === 'number';
  6 typeof Infinity === 'number';
  7 typeof NaN === 'number'; // Despite being "Not-A-Number"
  8 typeof Number(1) === 'number'; // but never use this form!
  9 
 10 
 11 // Strings
 12 typeof '' === 'string';
 13 typeof 'bla' === 'string';
 14 typeof '1' === 'string'; // note that a number within a string is still typeof string
 15 typeof (typeof 1) === 'string'; // typeof always returns a string
 16 typeof String('abc') === 'string'; // but never use this form!
 17 
 18 
 19 // Booleans
 20 typeof true === 'boolean';
 21 typeof false === 'boolean';
 22 typeof Boolean(true) === 'boolean'; // but never use this form!
 23 
 24 
 25 // Symbols
 26 typeof Symbol() === 'symbol'
 27 typeof Symbol('foo') === 'symbol'
 28 typeof Symbol.iterator === 'symbol'
 29 
 30 
 31 // Undefined
 32 typeof undefined === 'undefined';
 33 typeof declaredButUndefinedVariable === 'undefined';
 34 typeof undeclaredVariable === 'undefined';
 35 
 36 
 37 // Objects
 38 typeof {a: 1} === 'object';
 39 
 40 // use Array.isArray or Object.prototype.toString.call
 41 // to differentiate regular objects from arrays
 42 typeof [1, 2, 4] === 'object';
 43 
 44 typeof new Date() === 'object';
 45 
 46 
 47 // The following is confusing. Don't use!
 48 typeof new Boolean(true) === 'object';
 49 typeof new Number(1) === 'object';
 50 typeof new String('abc') === 'object';
 51 
 52 
 53 // Functions
 54 typeof function() {} === 'function';
 55 typeof class C {} === 'function';
 56 typeof Math.sin === 'function';
 57 
 58 
 59 // This stands since the beginning of JavaScript
 60 typeof null === 'object';

instanceof

object instanceof constructor (object: 要检测的对象 constructor: 某个构造函数 )

instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。

  1 // 定义构造函数
  2 function C(){}
  3 function D(){}
  4 
  5 var o = new C();
  6 
  7 // true,因为 Object.getPrototypeOf(o) === C.prototype
  8 o instanceof C;
  9 
 10 // false,因为 D.prototype不在o的原型链上
 11 o instanceof D;
 12 
 13 o instanceof Object; // true,因为Object.prototype.isPrototypeOf(o)返回true
 14 C.prototype instanceof Object // true,同上
 15 
 16 C.prototype = {};
 17 var o2 = new C();
 18 
 19 o2 instanceof C; // true
 20 
 21 o instanceof C; // false,C.prototype指向了一个空对象,这个空对象不在o的原型链上.
 22 
 23 D.prototype = new C(); // 继承
 24 var o3 = new D();
 25 o3 instanceof D; // true
 26 o3 instanceof C; // true
  1 var simpleStr = "This is a simple string";
  2 var myString  = new String();
  3 var newStr    = new String("String created with constructor");
  4 var myDate    = new Date();
  5 var myObj     = {};
  6 
  7 simpleStr instanceof String; // returns false, 检查原型链会找到 undefined
  8 myString  instanceof String; // returns true
  9 newStr    instanceof String; // returns true
 10 myString  instanceof Object; // returns true
 11 
 12 myObj instanceof Object;    // returns true, despite an undefined prototype
 13 ({})  instanceof Object;    // returns true, 同上
 14 
 15 myString instanceof Date;   // returns false
 16 
 17 myDate instanceof Date;     // returns true
 18 myDate instanceof Object;   // returns true
 19 myDate instanceof String;   // returns false
原文地址:https://www.cnblogs.com/linka/p/7105716.html