JS 类型检测

Posted 菜鸟提升记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS 类型检测相关的知识,希望对你有一定的参考价值。

PS:慕课心得(爱学习的妹纸,运气不会太差?)

首先我们要先了解JS中的类型有哪些(每个人看到的文档不同,对类型的分类可能会有不同,以下是个人的理解)?

  1.原始类型:String Number Boolean Undefined Null

  2.引用类型:Function(特殊) Object Array ....(除原始类型外的都是引用类型)

如此多的类型,在使用的时候如何是检测就成了一个很严肃的问题,因些下面对类型的检测做了出归类,但愿对你有帮助:

一.typeof( xxx)  || typeof  xxx

typeof   2            输出   number

typeof   ‘222‘                  输出    string

typeof  true                    输出     boolean

typeof    undefined          输出  undefined

typeof   (function(){})    输出  function

typeof   null         输出   object

typeof   {}           输出   object

typeof    []           输出   object

由上述示例不难看出,typeof 能检测的类型还是有限的,除 Null 以外的原始类型的检测还算准确,而引用类型只能正确检测出 Function ,因些引出 instanceof 来弥补 typeof 检测时遗留的漏洞

二、xxx instanceof Object 

instance,故名思义,实例,例子,所以instanceof 用于判断一个变量是否是某个对象的实例

var a=[];
console.log(a instanceof Array) //返回true 

另外,更重的一点是 instanceof 可以在继承关系中用来判断一个实例是否属于它的父类型。

例  function Foo(){}
  Foo.prototype = new Aoo();//javascript 原型继承
  var foo = new Foo();
  console.log(foo instanceof Foo)//true
  console.log(foo instanceof Aoo)//true

上面的代码中是判断了一层继承关系中的父类,在多层继承关系中,instanceof 运算符同样适用。

instanceof   参考:http://www.studyofnet.com/news/175.html

三、constructor

在W3C定义中的定义:constructor 属性返回对创建此对象的数组函数的引用

就是返回对象相对应的构造函数。从定义上来说跟instanceof不太一致,但效果都是一样的

如: (a instanceof Array)   //a是否Array的实例?true or false

   (a.constructor == Array)  // a实例所对应的构造函数是否为Array? true or false

function employee(name,job,born){
    this.name=name;
    this.job=job;
    this.born=born;
}
var bill=new employee("Bill Gates","Engineer",1985);
console.log(bill.constructor); //function employee(name, jobtitle, born){this.name = name; this.jobtitle = job; this.born = born;}

四、Object.prototype.toString.call()

可以说这个方法是最简单的方法,之所以说它简单,是因为这个检测方法能检测出任何类型,所以作为一个很懒的程序猿,我选择只记这个最简单的方法,就是这么任性(手动骄傲表情)

 我们来试试这个玩儿意儿:

var   gettype=Object.prototype.toString

        gettype.call(‘aaaa‘)           输出      [object String]

        gettype.call(2222)            输出      [object Number]

        gettype.call(true)             输出      [object Boolean]

        gettype.call(undefined)     输出      [object Undefined]

        gettype.call(null)                  输出   [object Null]

         gettype.call({})                   输出   [object Object]

         gettype.call([])                    输出   [object Array]
         gettype.call(function(){})     输出   [object Function]

 对于这种方法,以下有几个链接可供参考解释:

http://blog.csdn.net/zhangw428/article/details/4171630

http://my.oschina.net/sfm/blog/33197

http://openxtiger.iteye.com/blog/1893378






以上是关于JS 类型检测的主要内容,如果未能解决你的问题,请参考以下文章

js检测浏览器类型

JavaScript笔试题(js高级代码片段)

使用 Pygments 检测代码片段的编程语言

Android - 检测投射设备的类型

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

js检查数据类型