typeof与instanceof区别

js是一个弱类型的语言,所以一般想知道当前变量是哪一种类型必须判断类型,都知道判断类型的两种方式:typeof、 instanceof
它们各有缺点:typeof适用于基础数据类型判断,引用类型判断都是object。 instanceof 判断一个实例是否属于某种类型,但严重存在原型继承,所以判断最好在两个对象之间

typeof

typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型。它返回值是一个字符串,该字符串说明运算数的类型。typeof 可以用来检测给定变量的数据类型。

var a = [34,4,3,54],
        b = 34,
        c = 'adsfas',
        d = function(){console.log('我是函数')},
        e = true,
        f = null,
        g;
        console.log(typeof(a));//object
        console.log(typeof(b));//number
        console.log(typeof(c));//string
        console.log(typeof(d));//function
        console.log(typeof(e));//boolean
        console.log(typeof(f));//object
        console.log(typeof(g));//undefined

但是你可能会发现,typeof在判断null、array、object以及函数实例(new + 函数)时,得到的都是object(其实这也是原型继承)。这使得在判断这些数据类型的时候,得不到真的数据类型。由此引出instanceof

instanceof

instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上。通常来讲,使用 instanceof 就是判断一个实例是否属于某种类型。
a instanceof b:判断a是否为b的实例,可以用于继承关系中

b是c的父对象,a是c的实例,a instanceof b 与 a instanceof c 结果均为true

[] instanceof Object // true
[] instanceof Array // true
因为Array也是Object的实例对象,由于原型继承造成这种情况
在这里插入图片描述
在这里插入图片描述

instanceof 只能处理两个对象是否属于的实例关系

解决原型链的问题
  1. Array.isArray()针对数组的操作
  2. Object.prototype.toString.call(’’) === ‘[object String]’
    在这里插入图片描述
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值