JavaScript - typeof与instanceof区别

  • typeof 用于判断数据类型,返回值为6个字符串,分别为string、Boolean、number、function、object、undefined。
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。

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

console.log(typeof (a));//object
console.log(typeof (b));//object
console.log(typeof (c));//object

console.log(a instanceof Array);//true
console.log(b instanceof Object);//false
console.log(c instanceof Object);//true

总结:

  • 想必到这里大家也都明白两者的含义和用法,总之,typeof和instanceof都是用来判断变量类型的,两者的区别在于:
  1. typeof判断所有变量的类型,返回值有number,boolean,string,function,object,undefined。
  2. typeof对于丰富的对象实例,只能返回"Object"字符串。
  3. instanceof用来判断对象,代码形式为obj1 instanceof obj2(obj1是否是obj2的实例),obj2必须为对象,否则会报错!其返回值为布尔值。
  4. instanceof可以对不同的对象实例进行判断,判断方法是根据对象的原型链依次向下查询,如果obj2的原型属性存在obj1的原型链上,(obj1 instanceof obj2)值为true。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 曾几何时,一个HR问我,typeof可以判断数据类型,但是无法判断array和object,如何解决,我天真的想到...
    春木橙云阅读 28,658评论 5 7
  • typeof typeof是判断变量类型,它的返回值值为字符串,分别有6个值:number,boolean,str...
    青色河马阅读 3,933评论 0 2
  • 博客内容:什么是面向对象为什么要面向对象面向对象编程的特性和原则理解对象属性创建对象继承 什么是面向对象 面向对象...
    _Dot912阅读 5,320评论 3 12
  • 此文章用于归纳Object的所有方法 在JavaScript中,object是所有对象的基础(原型链的顶端),所以...
    moonburn阅读 3,911评论 0 5
  • 我们是永远的朋友!
    春风话雨9阅读 2,600评论 2 7

友情链接更多精彩内容