在 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

浙公网安备 33010602011771号