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__,为隐式原型。

在这里插入图片描述

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

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

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

在这里插入图片描述

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值