javascript-typeof和instanceof区别
javascript-typeof和instanceof区别
typeof
typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型。
它返回值是一个字符串,该字符串说明运算数的类型。(typeof 运算符返回一个用来表示表达式的数据类型的字符串)
typeof其实就是判断参数是什么类型的实例,就一个参数
typeof 一般只能返回如下几个结果:"number"、"string"、"boolean"、"object"、"function" 和 "undefined"。
var num = 1; console.log(typeof num);//number console.log(typeof NaN);//number var flag = true; console.log(typeof flag);//boolean var isNull = null; console.log(typeof isNull);//object var name = "ChanSamKwan"; console.log(typeof name);//string var variable; console.log(typeof variable)//undefined var arr = [1,2,3]; console.log(typeof arr);//object var obj = {name:"yoyo"}; console.log(typeof obj)//object function showName(name){ console.log(name) } console.log(typeof showName)//function
可以看到在使用 typeof 运算符时运算引用类型时,无论引用的是什么类型的对象,它都返回 “object”,(注意typeof null也是返回字符串object,函数返回 function字符串)
这就需要用到instanceof来检测某个对象是不是另一个对象的实例。instanceof运算符测试构造函数的prototype属性是否出现在对象的原型链中的任何位置
instanceof
// 定义构造函数 function C(){} function D(){} var o = new C(); o instanceof C; // true,因为 Object.getPrototypeOf(o) === C.prototype o instanceof D; // false,因为 D.prototype 不在 o 的原型链上 o instanceof Object; // true,因为 Object.prototype.isPrototypeOf(o)返回true C.prototype instanceof Object // true,同上 C.prototype = {}; var o2 = new C(); o2 instanceof C; // true o instanceof C; // false,C.prototype指向了一个空对象,这个空对象不在o的原型链上. D.prototype = new C(); // 继承 var o3 = new D(); o3 instanceof D; // true o3 instanceof C; // true 因为 C.prototype现在在o3的原型链上