typeof与instanceof区别

曾几何时,一个HR问我,typeof可以判断数据类型,但是无法判断array和object,如何解决,我天真的想到了极为复杂的循环方法解决这一问题,最终失败告终,谁知,instanceof就他娘的可以解决,一想到因为这么简单的无知错失的美好,我就想砸电脑。特此记录,以备后查!

typeof

用于判断数据类型,返回值为6个字符串,分别为stringBooleannumberfunctionobjectundefined

  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在判断nullarrayobject以及函数实例(new + 函数)时,得到的都是object。这使得在判断这些数据类型的时候,得不到真是的数据类型。由此引出instanceof

instanceof

instance中文翻译为实例,因此instanceof的含义就不言而喻,判断该对象是谁的实例,同时我们也就知道instanceof是对象运算符。
这里的实例就牵扯到了对象的继承,它的判断就是根据原型链进行搜寻,在对象obj1的原型链上如果存在另一个对象obj2的原型属性,那么表达式(obj1 instanceof obj2)返回值为true;否则返回false。

总结:

想必到这里大家也都明白两者的含义和用法,总之,typeof和instanceof都是用来判断变量类型的,两者的区别在于:

  • typeof判断所有变量的类型,返回值有number,boolean,string,function,object,undefined。
  • typeof对于丰富的对象实例,只能返回"Object"字符串。
  • instanceof用来判断对象,代码形式为obj1 instanceof obj2(obj1是否是obj2的实例),obj2必须为对象,否则会报错!其返回值为布尔值。
  • instanceof可以对不同的对象实例进行判断,判断方法是根据对象的原型链依次向下查询,如果obj2的原型属性存在obj1的原型链上,(obj1 instanceof obj2)值为true。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • typeof typeof是判断变量类型,它的返回值值为字符串,分别有6个值:number,boolean,str...
    青色河马阅读 700评论 0 2
  • 学费,是指围绕学习产生的一切费用。包括时间和金钱,硬件和软件。 有一种情况,有的人可能把旅行和玩耍也当做学习投资。...
    遇见莲心阅读 362评论 0 1
  • 今天是开营第一天,开朗的齐可昕跟王韵嘉一起在看黑柳彻子的窗边的小豆豆频道。黑柳彻子的作品特别适合小学生,在课余时间...
    孟鑫m阅读 423评论 1 0
  • 提记:沟通主题写作开始了。写我最擅长的、写大家最关心的。透过身边的一个故事、一个事件、一个案例,讲清沟通的一个原理...
    杨帆叨叨阅读 647评论 3 4
  • 上周六,父亲来临海开战友会,我去车站接他时,雨下的正急,他没带伞,佝偻着身子在站台避雨,脚边放着两个大黑袋,...
    天天向上2阅读 1,174评论 6 3