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

时间: 2024-11-05 18:46:27

JS 类型检测的相关文章

js类型检测

1.typeof  或者  typeof() 适合基本类型及function检测,遇null失效 ex: typeof 100      返回值为 "number" typeof true 返回值为 "boolean" typeof function(){} 返回值为  "function" typeof undefined 返回值为  "undefince" typeof new Object() 返回值为  "o

JS中的类型检测

JS中用于类型检测的函数有typeof.instanceof .Object.prototype.toString.constrcutor.duck type typeof用于检测基本类型和函数 有些特殊情况 null.数组.Date数据类型用typeof判断返回的是object instanceof用来判断对象类型,基于原型链,可以用来判断数组和Date数据类型

做webapp 使用JS来检测游览器是什么类型,或android是什么版本号

此文转自我的www.gbtags.com社区的文章. 做webapp还是微信游戏,特别是canvas,android上不同机器不同版本区别还是很大的.其实,我今天写了这个js,主要是来做js判断游览器类型,特别使用在android的和widnows phone上的 var brower = { versions:function(){ var u = window.navigator.userAgent; var num ; if(u.indexOf('Trident') > -1){ //IE

如何使用JS来检测游览器是什么类型,或android是什么版本号- 转载

var brower = { versions:function(){ var u = window.navigator.userAgent; var num ; if(u.indexOf('Trident') > -1){ //IE return "IE"; }else if(u.indexOf('Presto') > -1){ //opera return "Opera"; }else if(u.indexOf('Gecko') > -1 &a

【JS】类型检测

本文首发于我的个人博客 : http://cherryblog.site/ 前言 js 中的类型检测也是很重要的一部分,所以说这篇文章我们就来讲一下怎么对 JavaScript 中的基本数据类型进行检测.其实这也是在读 Zepto 源码中学习到的,所以阅读源码对我们的提升还是很有帮助的.本文基于参考了前辈们的文章之后个人理解此文写的有不当的地方,请各位大佬指正. 其实常规方法主要有四种 typeof instanceof Object.prototype.toString construcor

JS数据类型和堆栈+变量比较和值的复制+参数传递和类型检测

变量命名 变量名:字母 数字 下划线 美元符$ jquery:  $     $.each()   $ === jQuery underscore( js的一个函数库)  :   _     _.each() 关键字 :  if   for 保留字 :  class 推荐有意义的命名: buttonCancel   button_cancel   btnCancel 数据类型和堆栈 基本类型(可以修改) :  4  str   true  undefined  null 引用类型(不能修改) :

JavaScript类型检测

在编写JS代码中,经常要对某个变量进行类型检测.常用的类型检测方法有: typeof Object.prototype.toString constructor instanceof typeof typeof可以识别出基本数据类型(null除外),同时typeof并不能识别具体的对象类型(Function除外). eg: typeof "seven"; // "string" typeof 7; //"number" typeof true ;

js类型判断及鸭式辨型

目录 instanceof constructor 构造函数名字 鸭式辨型 三种检测对象的类方式: instanceof.constructor .构造函数名字 用法如下: 1)instanceof console.log([1,2,3] instanceof Array); true console.log([1,2,3] instanceof Object); true 尽管构造函数是原型的唯一标识,instanceof运算符的右操作数是构造函数,instanceof实际计算过程中检测的是对

JavaScript中类型检测

JavaScript是类型松散的,也就是说,在使用变量和函数参数之前,不会对它们进行比较已确保它们的数据类型正确. JS有五种基本数据类型:Undefined.Null.Boolean.Number和String,还有一种复杂数据类型Object. JS是不支持任何创建自定义类型的机制,所有值最终都将是上述6种数据类型之一. 对于上述6种类型的变量,可以利用typeof操作符来检测. typeof操作符可能返回下列六个字符串: "undefined"--这个值未定义,对应Undefin