关于 typeof 与 instanceof

在 JavaScript 中,typeof 和 instanceof 这两个操作符都可以用于区分不同的变量。这里总结一下。

typeof 用于检测数据类型,它的基本用法如下面的例子:

var u;
var b = true;
var i = 1234;
var s = "abc";
var f = function(){};
var n = null;
var o = {key: "value"};
var a = [1, 2, 3];

console.log(typeof u); // undefined
console.log(typeof b); // boolean
console.log(typeof i); // number
console.log(typeof s); // string
console.log(typeof f); // function
console.log(typeof n); // object
console.log(typeof o); // object
console.log(typeof a); // object

这是最简单的情形,需要注意后面三个的数据类型都是 object。接着看下面的例子

var b = new Boolean(true); 
var i = new Number(1234); 
var s = new String("abc"); 
var o = new Object();
var F = function(){}; 
var f = new F();
var g = new Function("alert(1);"); 

console.log(typeof b); // object
console.log(typeof i); // object
console.log(typeof s); // object
console.log(typeof o); // object
console.log(typeof f); // object
console.log(typeof g); // function

也就是说,用 new 方式得到的都是 object,除了最后一种情形是 function。

instanceof 操作符用于检测某个对象是否某构造函数的实例。基本的例子如下:

var b = new Boolean(true); 
var i = new Number(1234); 
var s = new String("abc"); 
var a = [1, 2, 3];
var r = new Array(3);
var o = {key: "value"};
var j = new Object();
var F = function(){}; 
var f = new F();
var g = new Function("alert(1);"); 

console.log(b instanceof Boolean); // true
console.log(i instanceof Number); // true
console.log(s instanceof String); // true
console.log(a instanceof Array); // true
console.log(r instanceof Array); // true
console.log(o instanceof Object); // true
console.log(j instanceof Object); // true
console.log(f instanceof F); // true
console.log(g instanceof Function); // true

但是,对于不由构造函数生成的数据,instanceof 总是返回 false。例如:

var b = true;
var i = 1234;
var s = "abc";
var u;
var n = null;

console.log(b instanceof Boolean); // false
console.log(i instanceof Number); // false
console.log(s instanceof String); // false
console.log(u instanceof Object); // false
console.log(n instanceof Object); // false

参考资料:
[1] typeof - JavaScript | MDN
[2] instanceof - JavaScript | MDN
[3] JavaScript 秘密花园 #typeof
[4] JavaScript: Check if object is array? - Stack Overflow
[5] Nifty Snippets: Say what?
[6] Remedial JavaScript - Douglas Crockford

原文地址:https://www.cnblogs.com/zoho/p/2871726.html