typeof和instanceof的区别

typeof

typeof是一个一元运算符,放在一个运算数之前,运算数可以使任意类型。

它返回值是一个字符串,说明运算数的类型。

typeof返回果:numberstringundefinedobjectbooleanfunctionsymbolES6新增

数字 typeof(x)=“number” 字符串 typeof(x)=“string” 布尔值 typeof(x)=“boolean” 对象,数组和null typeof(x) = “object” 函数 typeof(x)=“function”

console.log(typeof (123));//typeof(123)返回"number" 
console.log(typeof ("123"));//typeof("123")返回"string"
var param1 = "string";
var param2 = new Object();
var param3 = 10;
console.log(typeof(param1)+"\n"+typeof(param2)+"\n"+typeof(param3)); //string object number

我们可以使用typeof来确定一个变量是否存在。如:if(typeof(a)!=“undefined”)。

局限性:但是在判断一个引用类型的变量时会出现一个问题,无论是什么引用类型都是object。这时候就需要instanceof来检测某个对象是不是另一个对象的实例。

instanceof

instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的prototype属性。用于判断一个变量是否某个对象的实例

如 :var a=new Array();
alert(a instanceof Array); // true,
同时 alert(a instanceof Object) //也会返回 true;
//这是因为 Array 是 object 的子类。

这里如果要究其原理的话,那就要涉及到原型和隐形原型了。

上面例子中为什么a instanceof test 是返回true? (这里简单的说明一下原型,后面会补充详细的原型)

每个函数function都有一个prototype,即原型。每个对象都有一个__proto__,为隐式原型。

typeof和instanceof的区别

如上图,每个对象都有一个__proto__属性,指向创建该对象的函数的prototype

instanceof的判断规则往下面的例子看

function Foo(){};
var f1=new Foo();
alert(f1 instanceof Foo) //会返回true

typeof和instanceof的区别

然后instanceof的判断规则就是:instanceof运算符的第一个变量是一个对象,暂时称为A;第二个变量一般是函数,称为B。沿着A的__proto__这条线来找,同时沿着B的prototype这条线来找,如果两条线能找到同一个引用,就是返回true,如果找到终点都没有重合就返回false。

上一篇:Java编程中数据库中取出的值判断


下一篇:instanceof